c++调用delete[]会导致崩溃
c++ calling delete[] causes crash
我正在分配一个数组,然后当我调用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[]中使用
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 调用 free() 有时会导致程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- 使用 MS 绕道挂钩在调用钩子函数时崩溃C++
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 钩/绕道 d3d9 (现在/结束场景) - 似乎调用我的函数然后崩溃
- 亲.InsertAtHead() 调用创建程序崩溃
- 重写require后调用"lua_getfield()"时崩溃
- 当从成员类调用封装的std::begin时,程序崩溃
- Shaderc在android上调用glsl到spv程序集时崩溃
- 从 C# 模块调用C++函数引发随机崩溃
- 从 C# Windows 应用程序调用 C dll 会导致 svchost.exe 崩溃
- EGL 在第一次 opengl 函数调用时崩溃
- 如果调用 RtlSetProcessIsCritical,将使用 lstrcmpW 将命令行与值进行比较将使程序崩溃
- C++如果调用 vector,矢量分割错误会导致崩溃
- 由于调用 std::condition_variable 后参数无效而导致应用程序崩溃
- Windows 10特定的崩溃调用leaveccriticalsection