찾다

 >  Q&A  >  본문

C++ vector<char *>释放空间失败 ?

PHP中文网PHP中文网2803일 전635

모든 응답(3)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:26:55

    在C++层面, 你这个代码并没有错, 也会把内存free的掉.
    但是, 但是, C/C++的runtime, 也就是libc, 并不会真正free掉这个内存, 因为如果后面又有malloc, 他还得向操作系统申请内存, 还不如先自己留着.
    目前所有的libc都会自己cache住内存, 用来提高申请和释放的速度.

    PS:
    你这个C++代码写的太那个了, 如果以后还这么写, 会吃不少苦头的

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 13:26:55

    题主用的什么环境,我用的MAC + g++ 没什么问题。

    `tianbing:Temp tianbing$ cat test.cpp 
    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main(int argc, char ** argv){
        vector<char *> strVec;
        char *wordTmp = new char[strlen("abc")];
        strcpy(wordTmp, "abc");
        strVec.push_back(wordTmp);
        delete[] strVec[0];
        cout << "free sucessfully" << endl;
        return 0;
    }
    tianbing:Temp tianbing$ g++ test.cpp -o test
    tianbing:Temp tianbing$ ./test 
    free sucessfully`
    

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 13:26:55

    这样的情况如果可以,推荐使用智能指针和 STL 的容器。

    회신하다
    0
  • 취소회신하다