none
free失败 RRS feed

  • 问题

  •  str=(char*)malloc(100);
     str="faea\r\n";
     printf(str);
     free(str);

    这个代码执行到最后报错是什么原因?

    2011年10月8日 5:11

答案

  • 倒,这个改动只是从free一个不是malloc的地址改为完全不free而已,从一个bug改成了另一个bug

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    呵呵,实际上还是没有释放malloc分配的空间。你的str="faea\r\n";这个操作就修改了指针的值,指向了常量区(你的字符串"faea\r\n"存在常量区),之前malloc分配的内存就丢失了,而你后面str=NULL;
     free(str);这操作将str的值赋值为NULL,free释放NULL指针合法,什么也不做。所以程序并不会出什么错。只有内存泄露罢了。如果没有str=NULL,你最后的free一定是会崩溃的
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 Rob Pan 2011年10月19日 9:37
    2011年10月9日 4:48
    版主
  •  char * str=new char[100];

    memcpy(str,"faea\r\n",strlen(str));

     printf(str);
    delete []str;

    这样写总没错吧。

     

    • 已标记为答案 Rob Pan 2011年10月19日 9:37
    2011年10月19日 3:52

全部回复

  •  printf(str);
     str=NULL;
     free(str);

    已经解决了,要先NULL

    • 已标记为答案 Honny_yeyh 2011年10月8日 5:16
    • 取消答案标记 Honny_yeyh 2011年10月19日 3:52
    2011年10月8日 5:16
  • 倒,这个改动只是从free一个不是malloc的地址改为完全不free而已,从一个bug改成了另一个bug

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年10月9日 4:42
    版主
  • 倒,这个改动只是从free一个不是malloc的地址改为完全不free而已,从一个bug改成了另一个bug

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    呵呵,实际上还是没有释放malloc分配的空间。你的str="faea\r\n";这个操作就修改了指针的值,指向了常量区(你的字符串"faea\r\n"存在常量区),之前malloc分配的内存就丢失了,而你后面str=NULL;
     free(str);这操作将str的值赋值为NULL,free释放NULL指针合法,什么也不做。所以程序并不会出什么错。只有内存泄露罢了。如果没有str=NULL,你最后的free一定是会崩溃的
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 Rob Pan 2011年10月19日 9:37
    2011年10月9日 4:48
    版主
  •  char * str=new char[100];

    memcpy(str,"faea\r\n",strlen(str));

     printf(str);
    delete []str;

    这样写总没错吧。

     

    • 已标记为答案 Rob Pan 2011年10月19日 9:37
    2011年10月19日 3:52