delete[] 出错
生活随笔
收集整理的這篇文章主要介紹了
delete[] 出错
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
如
char* s = new char[len];
delete[] s;? //vs2010運行到此處程序不會報錯,但是會響一聲,然后程序好像在此處卡死了,不往下執(zhí)行了
前面有過此問題,一直不知道怎么回事,今天終于弄清楚了,請看
可能是堆被損壞,這也說明 XX.exe 中或它所加載的任何 DLL 中有 bug
點擊打開鏈接
?
今天發(fā)現(xiàn)原來是因為new的len不夠大,導(dǎo)致堆被破壞,無法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結(jié)束符的字符串復(fù)制到以dest開始的地址空間
而string.length()得到的大小是實際字符的個數(shù),不包括后面的結(jié)束符。
要保證src有足夠的空間,所以在要開辟至少len+1個空間
char* s = new char[len+1];
改成這樣就對了,沒有內(nèi)存泄露
總結(jié)
以上是生活随笔為你收集整理的delete[] 出错的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算灰度共生矩阵相关性时sigmax,y
- 下一篇: Visual Leak Detector