首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为啥今天用delete的时候又报错了

2013-02-06 
为什么今天用delete的时候又报错了?为什么今天用delete的时候又报错了?今天写了这样的代码:CString m_strn

为什么今天用delete的时候又报错了?
为什么今天用delete的时候又报错了?

今天写了这样的代码:

CString m_strname;
int len = m_strname.GetLength();
char* p = new char [len];
strcpy(p, f(m_strname, m_strname.GetLength()));//f是一个将CString转换为字符串的一个函数,返回字符串
delete [] p;
然后这里delete [] p的时候就报错了,我把new的大小改为:char* p = new char[len + 1];memset(p + len, 0, 1);之后delete就没事了,这是为什么?求指导~

delete的时候,系统指导这个new的空间是多大的吗?是怎么记录这个new空间有多大的呢?
[解决办法]
p的长度不够,strcpy产生内存溢出。
[解决办法]
如果你没修改过p的值,那么不是delete的原因,肯定是字符串处理的地方的问题。有时候内存报错指不出正确的地方。
[解决办法]
应该不是delete出错,把strcpy换成strncpy看看还会不会报错,如下:
strncpy(p, f(m_strname, m_strname.GetLength()), len);
p[len - 1] = '\0';

[解决办法]
strcpy把p写超出去了,多了个0,把内存写坏了。

热点排行