首頁  >  問答  >  主體

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

PHP中文网PHP中文网2715 天前585

全部回覆(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
  • 取消回覆