为啥今天用delete的时候又报错了
为什么今天用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,把内存写坏了。