将三重指针传递给函数然后mallocing一个二维数组
得到分段错误并且不明白为什么,必须传递三重指针才能进行分配,所以无法改变…
这是function
void alloc2d(double*** a, int m, int n) { int i, j; **a = malloc(sizeof(double *) * m); a[0] = malloc(sizeof(double) * n * m); for(i = 0; i < m; i++) a[i] = (*a + n * i); }
这是函数的调用……
double** m; alloc2d(&m, 5, 10); double count = 0.0; for (int i = 0; i < 5; i++) for (int j = 0; j < 10; j++) m[i][j] = ++count; for (int i = 0; i < 5; i++) for (int j = 0; j < 10; j++) printf("%f ", m[i][j]);
您希望为引用的指针分配内存。 改变**a = malloc(sizeof(double *) * m);
to *a = malloc(sizeof(double *) * m);
。 你为a[0]
分配了内存,所以用索引1
开始你的循环。 与*a
类似a[0]
的类型是double**
,但是您想要将指针设置a[0]
所指的位置。 a[0]
更改为(*a)[0]
并将a[i]
更改为(*a)[i]
。 像这样调整你的代码:
void alloc2d(double*** a, int m, int n) { *a = malloc( sizeof( double* ) * m ); // allocate the memory for (m) double* (*a)[0] = malloc( sizeof(double) * n * m ); // allocate the linearized memory for (n*m) double for( int i=1; i
我认为这将更容易理解:
void alloc2d(double*** a, int m, int n) { double **temp = malloc( sizeof( double* ) * m ); // allocate the memory for (m) double* temp[0] = malloc( sizeof(double) * n * m ); // allocate the linearized memory for (n*m) double for ( int i=1; i