在c中的子函数中分配内存时出现奇怪的分段错误

Sai*_*.H. 0 c segmentation-fault

这是我的代码,它为参数指定的大小矩阵分配空间,并返回指向所述矩阵的指针:

int **allocateSpace(int row, int col){  
   int i;
   int **a;
   a = malloc(sizeof(int *) * row);
   for(i = 0; i < row; i ++)                                               
      a[i] = malloc(sizeof(int) * col);  
   return a;
}      
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期工作.

但是,当我将代码更改为以下形式时,我得到一个分段错误:

void allocateSpace(int **a, int row, int col){
    int i;
    a = malloc(sizeof(int *) * row);
    for(i = 0; i < row; i ++)
      a[i] = malloc(sizeof(int) * col);
}
Run Code Online (Sandbox Code Playgroud)

似乎从allocateSpace()函数返回时,分配的内存被释放(因为我遇到了分段错误).但为什么?我所做的只是为给定的指针分配内存,而这一切都是在子函数中完成的.

总结一下我的问题:为什么我在第二段代码中出现分段错误?非常感谢你!

Nic*_*ick 6

因为您需要传入指向指针的指针,以便分配已分配的内存:

void allocateSpace(int ***a, int row, int col){
    int i;
    *a = malloc(sizeof(int *) * row);
    for(i = 0; i < row; i ++)
      ( *a )[i] = malloc(sizeof(int) * col);
}
Run Code Online (Sandbox Code Playgroud)

要调用它,你需要传递一个地址int**:

int** ppData;

allocateSpace( &ppData, 10, 10 );
Run Code Online (Sandbox Code Playgroud)