【问题标题】:allocate dynamic multiple array分配动态多数组
【发布时间】:2014-08-16 10:44:19
【问题描述】:

假设我们有以下设计:

typedef struct {
  double **pdouble;
  int *pint
}foo;

现在我要分配:

foo *pfoo;

问题是 pdouble 的总数是已知的,可以说它的 n;如果我们说 **pdouble 就像 pdouble [a][b],a 也是已知的。表示 a*b =n。但 b 是动态的。意味着 pdouble[1] 可能包含 b 列, pdouble[2] 可能包含 b' 列数,b 和 b',b" ... 将逐渐在程序中生成。 值得注意的是 b+b'+b"+ ... = n。 是否可以仅使用知道 n 和 a 来分配 foo?

我将对其进行一些编辑,这样我的问题就会变得更容易理解。

allocation_func(in size, int block_size)
foo *pfoo;

pfoo = (foo*) malloc(sizeof(foo))

/*some code here to do block_size number of *double which I don't know*/


foo->pdouble = (double**) malloc ( size * sizeof(double))

}

我忽略了每个人都知道的错误和其他必需的东西。
就这些了;

【问题讨论】:

  • "如果我们说 **pdouble 就像 pdouble [a][b]",那只是意味着我们根本不了解什么是指针,什么是数组。
  • 您可以分配foo,而无需了解关于 a、n、b 等的任何信息。它是一个结构foo 似乎与您的 real 问题似乎无关,即理解指针和数组之间的区别,以及管理动态指针数组。
  • 令人困惑的问题。只需简单的分配即可。
  • 感谢您不理解这个问题,只是争论为什么有人应该提出这样一个愚蠢的问题。
  • 在这个c代码pfoo =(foo*) malloc(sizeof(foo))中转换成(foo*)还有什么意义?

标签: c multidimensional-array malloc dynamic-arrays


【解决方案1】:

首先分配struct内存

 foo *pfoo = malloc(sizeof *pfoo); 

然后为struct成员double **pdouble;分配内存

//for example purpose i take 50x50 array

pfoo->pdouble = malloc(50* sizeof(double *));

for(int i=0;i<50;i++)
    pfoo->pdouble [i] = malloc(50* sizeof(double ));

最后为struct成员int *pint分配内存

 pfoo->pint=malloc(100*sizeof(int)); //100 is just for example

【讨论】:

  • 在第一个 sn-p 中丢失前导星号。所有*pfoo-&gt; 应该是pfoo-&gt;。并且您的最后一次分配可能在某个时候涉及int 的大小。
  • @WhozCraig 谢谢..这是第一个 sn-p 的复制粘贴错误。
  • @jayesh: pint=malloc(100) 应该是 pint=malloc(100*sizeof(int))
  • @askmish 已编辑答案。谢谢
  • 如果你知道数组维度是 50 * 50 就可以了,但是如果你有像 {m_1 +m_2 + ...+ m_50} 这样的数组并且你知道 m_1 + m_2 + m_3 的总数... + m_50 = 1000,你会怎么分配呢?
猜你喜欢
  • 2017-03-18
  • 2020-04-24
  • 2011-05-31
  • 2013-04-02
  • 1970-01-01
  • 2020-03-06
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多