动态分配C中的数组数组

hyp*_*ean 17 c memory arrays allocation dynamic-memory-allocation

我并不真正理解C中的一些基本内容,比如动态分配数组数组.我知道你可以这样做:

int **m;
Run Code Online (Sandbox Code Playgroud)

为了声明一个二维数组(随后将使用一些*alloc函数分配).也可以通过这样做"轻松"访问它*(*(m + line) + column).但是我应该如何为该数组中的元素赋值?使用gcc时,以下语句m[line][column] = 12;因分段错误而失败.

任何文章/文档将不胜感激.:-)

jpa*_*cek 34

m[line][column] = 12语法是确定(提供linecolumn在范围内).

但是,您没有编写用于分配它的代码,因此很难确定它是错还是正确.它应该是符合的

m = (int**)malloc(nlines * sizeof(int*));

for(i = 0; i < nlines; i++)
  m[i] = (int*)malloc(ncolumns * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

一些旁注:

  • 这样,您可以为每条线分配不同的长度(例如,三角形阵列)
  • 稍后您可以在使用数组时realloc()或free()单个行
  • 当你释放()整个数组时,你必须释放()每一行


Jar*_*Par 5

您的语法m [line] [colummn]是正确的.但是为了在C中使用2D数组,必须为它分配内存.例如,此代码将为给定行和列的表分配内存.

int** AllocateArray(int line, int column) {
  int** pArray = (int**)malloc(line*sizeof(int*));
  for ( int i = 0; i < line; i++ ) {
    pArray[i] = (int*)malloc(column*sizeof(int));
  }
  return pArray;
}
Run Code Online (Sandbox Code Playgroud)

注意,为了简洁起见,我省略了malloc的错误检查.真正的解决方案应该包括它们.