牛骨文教育服务平台(让学习变的简单)
博文笔记

delete[] 出错

创建时间:2013-08-23 投稿人: 浏览次数:2042

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];

改成这样就对了,没有内存泄露

 
 
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。