我已经有一段时间没有使用任何 C++ 了,但我决定完成我为某人所做的一个大项目。不过,我现在收到以下错误消息...
检测到堆损坏:在 0x17DEB940 处的正常 block (#1761) 之后。 CRT 检测到应用程序在堆缓冲区结束后写入内存。
我一直在逐步执行我认为可能导致它的所有功能,但我不知所措。有什么方法可以使用更高级的调试功能来解决这个问题吗?
最佳答案
这听起来确实像是典型的内存损坏错误。该平台将是有用的信息。在没有看到您的代码及其复杂性的情况下,有两种可能性:
我会猜测运行时 库将允许您添加对 堆验证代码直接来自 你的代码。我建议放置 调用堆验证代码 代码中的不同位置,这样你 可以弄清楚事情的去向 错误的。你会发现那个地方 堆坏了,你就会知道 在上一次通话中没问题。 如果 你需要然后查看代码 哪里出了问题。
如果相同的步骤破坏了内存中完全相同的位置, 你应该可以使用你的 调试器在 内存变了。一些 这些变化可能是有意的,但 你应该能弄清楚 哪个是罪魁祸首。
如果您的代码特别复杂或重现此代码所需的步骤很长,您可以结合使用两者 - 缩小有问题的代码部分,然后在损坏的内存位置放置断点。
大卫
关于C++ 堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635862/