c/c++语言开发共享双指针在函数中没有得到malloc’d

所以我在C中工作,我在一个函数内部有一个int ** ,它在另一个函数中被修改。 当我运行这个问题时,我得到了一个SegFault,所以我决定用gdb调试它。 我发现内存从未分配给这个数组。 我的function是这样的

 void declarer() { int ** a; alocator(a, 4, 5); for (int i = 0; i < 4; i++) for (int j = 0; j < 5; j++) printf("%dn", a[i][j]); } void alocator(int ** a, int b, int c) { a = (int **)malloc(sizeof(int *) * b); for (int i = 0; i < b; i++) { a[i] = (int *)malloc(sizeof(int) * c); for (int j = 0; j < c; j++) a[i][j] = j; } } 

当我在行alocator(a, 4, 5)之后运行带有断点的gdb (在程序段错误之前),并且我写了pa ,我得到$1 = (int **) 0x0 ,这表明a是在地址0x0并且有没有为它分配内存。 为什么alocator没有为它分配内存,我怎样才能让alocator为内存分配内存?

    因为你传递**a值,你必须将它作为指针传递。 所以使用三指针:

     void declarer() { int **a; alocator(&a, 4, 5); ... } void alocator(int ***a, int b, int c) { *a = (int **)malloc(sizeof(int *) * b); ... 

    您将变量a按值传递给函数,因此不会更改其值。 你有两个解决方案:

    更改函数以接受int ***类型的值并传递by地址,或将函数的返回值更改为int **并在调用时使用该值。

    例:

     void declarer() { int ** a = alocator(4, 5); for (int i = 0; i < 4; i++) for (int j = 0; j < 5; j++) printf("%dn", a[i][j]); } int **alocator(int b, int c) { int **a = (int **)malloc(sizeof(int *) * b); for (int i = 0; i < b; i++) { a[i] = (int *)malloc(sizeof(int) * c); for (int j = 0; j < c; j++) a[i][j] = j; } return a; } 

      以上就是c/c++开发分享双指针在函数中没有得到malloc’d相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

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

      精彩推荐