C++ vector<char *>释放空间失败 ?
PHP中文网
PHP中文网 2017-04-17 13:24:55
0
3
636
PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(3)
伊谢尔伦

在C++層面, 你這個程式碼並沒有錯, 也會把記憶體free的掉.
但是, 但是, C/C++的runtime, 也就是libc, 並不會真正free掉這個記憶體,因為如果後面又有malloc, 他還得向操作系統申請內存, 還不如先自己留著.
目前所有的libc都會自己cache住內存, 用來提高申請和釋放的速度.

PS:
你這個C++程式碼寫的太那個了, 如果以後還這麼寫, 會吃不少苦頭的

左手右手慢动作

題主用的什麼環境,我用的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`
洪涛

這樣的情況如果可以,建議使用智慧型指標和 STL 的容器。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板