读书人

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

发布时间: 2013-02-06 14:02:20 作者: rapoo

为什么今天用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,把内存写坏了。

读书人网 >C++

热点推荐