如
char* s = new char[len];
delete[] s; //vs2010运行到此处程序不会报错,但是会响一声,然后程序好像在此处卡死了,不往下执行了
前面有过此问题,一直不知道怎么回事,今天终于弄清楚了,请看
可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
今天发现原来是因为new的len不够大,导致堆被破坏,无法delete掉。
原来程序是这样子的。
const int len = buffer.length();
char* s = new char[len];
strcpy(s,buffer.c_str());
delete[] s;
s = NULL;
来看一下char *strcpy(char* dest, const char *src);
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
而string.length()得到的大小是实际字符的个数,不包括后面的结束符。
要保证src有足够的空间,所以在要开辟至少len+1个空间
char* s = new char[len+1];
改成这样就对了,没有内存泄露