在vs2010运行到此处程序不会报错,但是程序好像在此处卡死了,不往下执行了,主要代码如下:
const int len = buffer.length();
char* s = new char[len];
strcpy(s,buffer.c_str());
delete[] s;
s = NULL;
原因:因为new的len不够大,导致堆被破坏,无法delete掉 。
strcpy函数声明:char *strcpy(char* dest, const char *src);
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间,而string.length()得到的大小是实际字符的个数,不包括后面的结束符。
要保证src有足够的空间,所以在要开辟至少len+1个空间
char* s = new char[len+1];
改成这样就对了,没有内存泄露。
在此做个笔记,方便以后学习。
**************************************************************************************************************