ved*_*eda 14 c function segmentation-fault
当我将双指针传递给函数以初始化内存时,我遇到了分段错误
int main()
{
double **A;
initialize(A, 10, 10);
......
}
void initialize(double **A, int r, int c)
{
A = (double **)malloc(sizeof(double *)*r);
for(int i = 0; i< r; i++) {
A[i] = (double *)malloc(sizeof(double) *c);
for(int j = 0; j < c; j++) {
A[i][j] = 0.0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何将双指针传递给函数.....
Let*_*_Be 18
如果要修改指针指针,则需要将指针传递给指针指针.
void func(double ***data) { *data = malloc(sizeof(double*)*10); for.... };
double ** data; func(&data);
Run Code Online (Sandbox Code Playgroud)
IVl*_*lad 18
像其他人所说的那样,你需要在init函数中使用一个指向指针的指针.这是initialize函数的变化:
void initialize(double ***A, int r, int c)
{
*A = (double **)malloc(sizeof(double *)*r);
for(int i = 0; i< r; i++) {
(*A)[i] = (double *)malloc(sizeof(double) *c);
for(int j = 0; j < c; j++) {
(*A)[i][j] = 0.0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
而且main将是:
int main()
{
double **A;
initialize(&A, 10, 10);
}
Run Code Online (Sandbox Code Playgroud)
此外,发布它时的代码在传入A指针时不会导致分段错误.当您从函数返回并尝试访问时A,很可能发生分段错误,因为Ain main不会被初始化.只有它的副本按照你的方式初始化,并且该副本是initialize函数的本地副本,因此当你返回时它会丢失.