gpt4 book ai didi

c++ - 为什么 delete[] 会导致堆损坏错误?

转载 作者:行者123 更新时间:2023-11-27 23:55:23 25 4
gpt4 key购买 nike

我帮我 friend 调试了一段代码,有问题的部分是这样的:

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[] 时会导致堆损坏错误?是什么原因造成的?

这个错误是调试器抛出的,我的问题是:为什么这个错误在释放内存的时候弹出,而不是更早?以这种方式查找代码中的任何错误会容易得多。

@edit old c = nullptr -> text = nullptr我不小心写了这个错误,(抱歉,我没有注意到,现在是我的意思)。问题是,在此任务中禁止使用字符串,因此必须以 C 方式完成。抱歉进行了这么多编辑。我真的必须学习如何提出准确的问题。

最佳答案

堆损坏是由对 strcpy 的调用引起的,它写入了已分配内存块的末尾。当代码调用 delete[] 时,它被检测到

关于c++ - 为什么 delete[] 会导致堆损坏错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42985262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com