这个问题建立在前面两个问题的基础上:C++ Passing a dynamicly allocated 2D array by reference&C - Pass by reference multidimensional array with known size
我试图使用前面这些问题的答案为2d数组分配内存,但是内存从未分配过,每次尝试访问数组时,我都会收到一个错误的访问错误!
这就是我所拥有的:

const int rows = 10;
const int columns = 5;

void allocate_memory(char *** maze); //prototype

int main(int argc, char ** argv) {
  char ** arr;
  allocate_memory(&arr) //pass by reference to allocate memory
  return 0;
}

void allocate_memory(char *** maze) {
  int i;
  maze =  malloc(sizeof(char *) * rows);
  for (i = 0; i < rows; ++i)
      maze[i] = malloc(sizeof(char) * columns);
}

最佳答案

首先,您应该注意到在C中没有pass-by引用,只有pass-by值。
现在,您需要为maze[0](或*maze)分配内存

*maze =  malloc(sizeof(char *) * rows);

然后
for (i = 0; i < rows; ++i)
  (*maze)[i] = malloc(sizeof(char) * columns);

关于c - 通过将动态2D数组传递给另一个函数来分配它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36471105/

10-11 05:08