C 使用指向固定大小数组的指针分配二维数组

C 使用指向固定大小数组的指针分配二维数组,c,multidimensional-array,dynamic-allocation,C,Multidimensional Array,Dynamic Allocation,这样动态分配2d数组在C中有效吗 //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=mall

这样动态分配2d数组在C中有效吗

//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;
inti,x=5,y=10;
int**arr2d=malloc(sizeof(int*[x]);
对于(i=0;i
唯一真正的问题是,如果您请求的内存超出了
malloc
调用所能满足的范围(您可能有足够的可用内存,但不是在单个连续块中)

为了保持理智,请执行以下操作:

T (*arr)[cols] = malloc( sizeof *arr * rows );
这将允许您将其索引为
arr[i][j]
,而不是
(*arr)[i][j]