我正在分配一个数组,然后当我调用delete []时会导致程序崩溃,当我不调用delete时程序运行正常。这是我的代码
MyObject *myArray= new MyObject[numPoints];
delete[] myArray;
我非常困惑,所以任何帮助都会受到赞赏
此外,当我调试时,我收到错误消息“HEAP CORRUPTION DETECTED:正常块(#48)后0x000032E90。 CRT检测到应用程序在堆缓冲区结束后写入内存。“
解决方案!:我在没有足够空间的情况下初始化阵列。出于某种原因,我仍然可以向数组中添加内容,但是在调用析构函数时它会崩溃。
答案 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 []。
中