得到分段错误并且不明白为什么,必须传递三重指针才能进行分配,所以无法改变…
这是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
以上就是c/c++开发分享将三重指针传递给函数然后mallocing一个二维数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519052.html