c++调用delete[]会导致崩溃

c++ calling delete[] causes crash

本文关键字:崩溃 调用 delete c++      更新时间:2023-10-16

我正在分配一个数组,然后当我调用delete[]时,它会导致程序崩溃,当我不调用delete时,程序工作正常。这是我的代码

MyObject *myArray= new MyObject[numPoints];
delete[] myArray;

我超级困惑,所以任何帮助都会很感激

此外,当我调试时,我得到错误信息"HEAP CORRUPTION DETECTED: after Normal block (#48) at 0x000032E90。CRT检测到应用程序在堆缓冲区结束后写入内存。"

解决方案!我在初始化数组时空间不足。由于某些原因,我仍然可以向数组中添加东西,但当调用析构函数时,它会崩溃。

我的通灵调试能力告诉我,由于MyObject正在进行动态分配,您忘记遵守三规则....您缺少复制构造函数、复制赋值操作符,或者两者都缺少。例如,请参阅http://drdobbs.com/184401400

但是因为这是c++,你可以通过使用vector来解决所有的问题。

CRT detected that the application wrote to memory after end of heap buffer.
这通常意味着你写过了数组的末尾。
解决方案1:找到访问数组的每个位置,并放入一个断言来验证索引大于或等于零,并且小于 numPoints
方案2:将MyObject *替换为std::vector。(做这个)

EDIT: When i uncomment everythign in the MYObject deconstructor the program does not crash. The deconstructor code is :
delete [] myPoints;
points is an array in MyObject.

等等,你在MyObject构造函数中分配了一个MyObjects数组吗?如果递归地分配数组,那么堆不足就不足为奇了。至少如果我没理解错的话,你指的是析构函数。

如果不是这样,那么在你的MyObject类中仍然发生了一些可疑的事情。可在构造函数或operator new[]或operator delete[]中使用