C 分配动态多数组

C 分配动态多数组,c,multidimensional-array,malloc,dynamic-arrays,C,Multidimensional Array,Malloc,Dynamic Arrays,假设我们有以下设计: 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和

假设我们有以下设计:

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))

}
我忽略了所有人都知道的错误和其他必需的东西。

仅此而已

首先分配
struct
内存

 foo *pfoo = malloc(sizeof *pfoo); 
然后为
struct
成员
double**pduble分配内存

//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 ));

“如果我们说**pdouble就像pdouble[a][b]”,那就意味着我们根本不了解什么是指针,什么是数组。你可以分配
foo
,而不知道a、n、b等等。这是一个结构
foo
似乎与您真正的问题无关,即理解指针和数组之间的差异,以及管理动态指针数组。令人困惑的问题。只回答了简单的分配。感谢你没有理解这个问题,只是争论为什么有人会有这样一个愚蠢的问题。还有,在这个
c
code
pfoo=(foo*)malloc(sizeof(foo))
中,向
(foo*)转换的意义是什么?把第一个片段放进去,去掉前面的星号。所有那些
*pfoo->
应该是
pfoo->
。您的上一次分配可能在某一点上涉及到
int
的大小。@WhozCraig谢谢。这是第一个代码片段的复制粘贴错误。@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,你怎么分配?
 pfoo->pint=malloc(100*sizeof(int)); //100 is just for example