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

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

感谢大家的帮助,原因应该是数组下标越界(非常感谢araraloren):

char *wordTmp = new char[strlen("abc") + 1];

请问下面的代码为什么会释放空间失败?

vector<char *> strVec;
char *wordTmp = new char[strlen("abc")];
strcpy(wordTmp, "abc");
strVec.push_back(wordTmp);
delete[] strVec[0];

有解决办法吗?
谢谢。


题主用的什么环境,我用的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`

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

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


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

【热门文章】
【热门文章】