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()函数返回时,分配的内存被释放(因为我遇到了分段错误).但为什么?我所做的只是为给定的指针分配内存,而这一切都是在子函数中完成的.
总结一下我的问题:为什么我在第二段代码中出现分段错误?非常感谢你!
因为您需要传入指向指针的指针,以便分配已分配的内存:
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)