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

时间:2011-09-20 17:02:10

标签: c++ visual-studio visual-c++

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

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

我非常困惑,所以任何帮助都会受到赞赏

此外,当我调试时,我收到错误消息“HEAP CORRUPTION DETECTED:正常块(#48)后0x000032E90。 CRT检测到应用程序在堆缓冲区结束后写入内存。“

解决方案!:我在没有足够空间的情况下初始化阵列。出于某种原因,我仍然可以向数组中添加内容,但是在调用析构函数时它会崩溃。

3 个答案:

答案 0 :(得分:3)

我的通灵调试能力告诉我,由于MyObject正在进行动态分配,你忘了遵守三条规则....你错过了一个复制构造函数,复制赋值运算符,或两者兼而有之。举一个例子,请参阅http://drdobbs.com/184401400

但是因为这是C ++,所以只需使用vector即可解决所有问题。请强烈考虑这种方法。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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类中仍然会出现一些问题。在构造函数或运算符new []或operator delete []。