使用指向固定大小数组的指针分配2D数组

时间:2014-09-17 01:15:23

标签: c multidimensional-array dynamic-allocation

在C中以这种方式动态分配2d数组是否有效?

//fixed size
int (*arr2d)[9][9]=malloc(sizeof(int[9][9]));

//variable size
int x=5,y=3;
int (*arr2d)[x][y]=malloc(sizeof(int[x][y]));

//assignment
(*arr2d)[0][1]=2;

编辑: 通过“有效”我的意思是,是否有任何陷阱,而不是:

int i,x=5,y=10;
int **arr2d=malloc(sizeof(int*[x]));
for(i=0;i < x;i++)
    arr2d[i]=malloc(sizeof(int[y]));

arr2d[0][0]=5;

1 个答案:

答案 0 :(得分:3)

唯一真正的问题是,如果您请求的内存超过malloc调用所能满足的内存(您可能有足够的可用内存,但不能在单个连续的块中)。

为了拯救你的理智,请做一些这样的事情:

T (*arr)[cols] = malloc( sizeof *arr * rows );

这样您就可以将其编入arr[i][j]而不是(*arr)[i][j]