我帮我朋友与调试代码,有问题的部分是类似的东西:为什么delete []会导致堆损坏错误?
当然class MyClass {
char * text;
public:
MyClass(const char * c) {
if (c != nullptr) {
text = new char[strlen(c)];
strcpy(text, c);
}
else
text = nullptr;
}
~MyClass() {
delete[] text;
}
};
int main() {
MyClass foo("bar");
return 0;
}
问题是strlen(c)
,应该是strlen(c) + 1
。无论如何,令我惊讶的是,为什么在析构函数中调用delete []的时候会导致堆损坏错误?是什么造成的?
这个错误是由调试器引发的,我的问题是: 为什么在释放内存的时候弹出这个错误,而不是早些时候? 以这种方式查找代码中的任何错误会容易得多。有一个我不小心写了这个错误,(抱歉,我没有注意到,现在这就是我的意思)。事情是,在这个任务中禁止使用字符串,所以必须使用C语言。 对不起,这么多的编辑。我真的必须学会如何提出确切的问题。
最有可能你违反了[规则3](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-ree) – NathanOliver
@someprogrammerdude“*当然问题是与strlen( c),应该是strlen(c)+ 1. *“。 –
'c = nullptr'你可能是指'text = nullptr'那里。 .. –