c/c++语言开发共享将三重指针传递给函数然后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 

      以上就是c/c++开发分享将三重指针传递给函数然后mallocing一个二维数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519052.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐