这样的代码会不会造成内存泄露?char *str1 = new char[4];
char *str2 = "abcdefghijklmno";str1 = str2;就这样.
str1原先获得的4个char内存去哪里呢?会被自动回收吗?

解决方案 »

  1.   

    还有,这样又会不会泄露呢?char *str1 = new char[4]; 
    char *str2 = "1234567890";
    str1 = new char[10];
    str1 = str2;这里,str1本来有4个char内存,但为接收10个char的字符串str2,又new了10个char那么,它总共new了多少个char?原先的4个char会丢失泄露吗?两个问题,谢谢大家指导新手.
      

  2.   

    new 出来的内存是要自己 delete 的lz 的代码里,new 的内存没有释放,而指针又赋了新值原来的地址没有其他的方式引用了,出现了 memoey leak
      

  3.   

    那使用char*岂不很麻烦?假如我原先char *str1 = "1234567890";
             char *str2 = new char[10];
                   str2 = str1;然后我想给它赋新值 str2 = "1234";
    那么必须这样?     delete []str2;   
                     str2 = "1234";如果还是通过str3获得的,还需要:
                     delete []str2;
                     str2 = new char[4];
                     str2 = str3;是这样吗?
      

  4.   

    那么说,复制字符串时,要将复制到的字符串先delete空,再new足够的数量.对吧?
      

  5.   

    lz 弄错了概念这里的 char * 不应该重新赋值,分配新的空间应该改变的 char * 指向的内存空间的内容C 字符串的操作不是用 =,要用 strcpy 之类的函数C++ 的话,就用 std::string
      

  6.   


    恩  这个现在明白了.但还是不完全理解,strcpy的话,也是必须实现new够字符的,那还是要先delete再new?