通过引用将动态二维数组传递给另一个函数来分配动态二维数组

时间:2016-04-07 08:48:39

标签: c multidimensional-array dynamic pass-by-reference

此问题基于两个先前提出的问题:C++ Passing a dynamicly allocated 2D array by reference& C - Pass by reference multidimensional array with known size

我试图使用前面这些问题的答案为2d-Array分配内存,但是内存从未被分配过,每次尝试访问数组时都会收到BAD_ACCESS错误!

这就是我所拥有的:

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);
}

1 个答案:

答案 0 :(得分:3)

首先,您应该注意到C中没有按引用传递,只有按值传递

现在,您需要为maze[0](或*maze

分配内存
*maze =  malloc(sizeof(char *) * rows);  

然后

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