c/c++语言开发共享C – 使用双指针的动态内存分配

我在函数名myalloc()中分配一些内存,并在main()中使用和释放它。 我正在使用双指针来执行此操作,这里的代码工作正常,

//Example # 1 #include  #include  #include  void myalloc( char ** ptr) { *ptr = malloc(255); strcpy( *ptr, "Hello World"); } int main() { char *ptr = 0; myalloc( &ptr ); printf("String is %sn", ptr); free(ptr); return 0; } 

但是下面的代码不起作用并给出了分段错误。 我认为这是使用双指针的另一种方法。

 //Example # 2 #include  #include  #include  void myalloc( char ** ptr) { *ptr = malloc(255); strcpy( *ptr, "Hello World"); } int main() { char **ptr = 0; myalloc( ptr ); printf("String is %sn", *ptr); free(*ptr); return 0; } 

请澄清一下,为什么它在第二个例子中给出了我的段错误。

注意:Language = C,Compiler = GCC 4.5.1,OS = Fedora Core 14

此外,我知道有一些问题已经被问及与使用双指针的内存分配有关,但它们没有解决这个问题,所以请不要将其标记为重复性问题。

     char **ptr = 0; *ptr = malloc(255); 

    尝试将malloc返回的指针写入ptr指向的地址( char*类型)。 地址结果是…… 0 ,这是不可写的内存。

    ptr应指向您可以写入的地址。 您可以执行以下操作之一:

     char *stackPtr; // Pointer on the stack, value irrelevant (gets overwritten) ptr = &stackPtr; // or char **ptr = alloca(sizeof(char*)); // Equivalent to above // or char **ptr = malloc(sizeof(char*)); // Allocate memory on the heap // note that ptr can be 0 if heap allocation fails 

     char **ptr = 0; foo( ptr ); 

    您正在传递ptr指向的值。 但是你还没有把ptr指向任何东西。

     *ptr = malloc(255); 

    现在你要为“无所事事”分配一些内存。 所以这不会起作用,并且会发生段错误。 你为什么这么说这是使用双指针的另一种方式? 如果我错了,我道歉,但我猜你之前在Turbo-C中使用过类型的程序?

    在第二种情况下,您将main的ptr值(0(NULL))传递给myalloc()ptr 。 然后myalloc()尝试取消引用它的空指针ptr

      以上就是c/c++开发分享C – 使用双指针的动态内存分配相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

      Like (0)
      Previous 2021年1月9日
      Next 2021年1月9日

      精彩推荐