我有一个无限循环,如果用户退出主窗口,该循环就会中断。我在循环中运行以下代码:
unsigned int* renderableShapeIndices = new unsigned int[aNumberCreatedAtRuntime];
// Do something
delete[] renderableShapeIndices;
然后,以下情况会发生几次循环迭代,并在第一次迭代后停止发生:
1st breakpoint:
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in Main.exe.
2nd breakpoint:
Unhandled exception at 0x00007FF8C3B8C729 (ntdll.dll) in InTimeEngine2D.exe: 0xC0000374: A heap has been corrupted (parameters: 0x00007FF8C3BF7780).
还有其他人遇到过类似的问题吗?我不知道发生了什么事。
另一个有趣的因素是它只发生在调试模式下。在发布模式下不会发生这种情况。
问题的答案在问题评论区。
显然,如果尝试向数组的边界之外写入数据,它会这样做,但最终会覆盖代码中其他位置的数据,从而导致程序其他部分出现错误,即使程序的这两部分是无关。就我而言,它们完全无关。
如果有人在代码中的随机位置遇到崩溃并收到该消息,那么不要相信调用堆栈。这可能会产生误导。相反,请仔细检查堆内存分配的代码,并确保不会访问未分配的内存。令人难以置信的是,当我在完全不同的地方修复 malloc 时,其他分配/免费调用上的这些随机崩溃神奇地消失了。即使您尝试通过 vsprintf() vfprinrf() (作为调试帮助)解决该问题,您也会在这些函数内遇到随机崩溃,因为这些函数也使用堆内存。