这是我的代码,它为参数指定大小的矩阵分配空间,并返回指向所述矩阵的指针:
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;
}
以上代码按预期工作。
但是,当我将代码更改为以下形式时,出现了段错误:
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);
}
似乎从 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);
}
要调用它,您需要传递 int**
的地址:
int** ppData;
allocateSpace( &ppData, 10, 10 );
关于c - 在 c 的子函数中分配内存时出现奇怪的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10009281/