认证高级PHP讲师
在C++層面, 你這個程式碼並沒有錯, 也會把記憶體free的掉.但是, 但是, C/C++的runtime, 也就是libc, 並不會真正free掉這個記憶體,因為如果後面又有malloc, 他還得向操作系統申請內存, 還不如先自己留著.目前所有的libc都會自己cache住內存, 用來提高申請和釋放的速度.
free
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 的容器。
在C++層面, 你這個程式碼並沒有錯, 也會把記憶體
free
的掉.但是, 但是, C/C++的runtime, 也就是libc, 並不會真正free掉這個記憶體,因為如果後面又有malloc, 他還得向操作系統申請內存, 還不如先自己留著.
目前所有的libc都會自己cache住內存, 用來提高申請和釋放的速度.
PS:
你這個C++程式碼寫的太那個了, 如果以後還這麼寫, 會吃不少苦頭的
題主用的什麼環境,我用的MAC + g++ 沒什麼問題。
這樣的情況如果可以,建議使用智慧型指標和 STL 的容器。