我怎样才能在c中使用动态二维数组

4 c arrays malloc pointers

我试着制作一个动态的5x5 int数组

int **data=malloc(5*5);
Run Code Online (Sandbox Code Playgroud)

但是在尝试访问它时会出现分段错误.

Yas*_*pta 7

你需要为你想要制作的2d阵列分配内存(我认为你理解).但首先,您必须为指针存储2D数组的行分配空间.

int **data=(int**)malloc(sizeof(*data)*5); //Here 5 is the number of rows
Run Code Online (Sandbox Code Playgroud)

现在,您可以为每行分配空间.

for(int r=0;r<5;r++){
  data[r]=(int*)malloc(sizeof(**data)*5);//here 5 is the width of the array
}
Run Code Online (Sandbox Code Playgroud)

如果你想要整个数组的连续内存块,你可以分配一个大小为25的单维数组,并像访问它一样data[r*5+c].

PS:而不是sizeof(*data)和sizeof(**data),你可以使用sizeof(int*)和sizeof(int)避免混淆*

PS:如果你没有使用C++,那么从malloc的返回值中删除强制转换更好(参见注释).

  • 不建议也不需要转换`malloc`的结果 (5认同)