C++堆腐败

8 c++ debugging heap-memory corruption visual-c++

我有一段时间没有做过任何C++,但决定完成一个我正在为某人工作的大项目.我现在收到以下错误消息但...

HEAP CORRUPTION DETECTED:在正常阻止(#1761)之后在0x17DEB940.CRT检测到应用程序在堆缓冲区结束后写入内存.

我一直在踩过我认为可能导致它的所有功能,但我不知所措.有没有办法使用更高级的调试功能来追捕它?

小智 4

这听起来确实像是一个经典的内存损坏错误。该平台将是有用的信息。在没有看到您的代码及其复杂性的情况下,有几种可能性:

  1. 我猜测运行时库将允许您直接从代码添加对堆验证代码的调用。我建议在代码中的不同位置调用堆验证代码,以便您可以找出哪里出了问题。你会找到堆坏的地方,并且你会知道在上次调用时它是好的。如果需要,请继续缩小该窗口的范围,然后检查出现问题的代码。

  2. 如果相同的步骤损坏了内存中完全相同的位置,您应该能够使用调试器在发生更改的内存上设置断点(或观察点)。其中一些更改可能是有意为之,但您应该能够找出罪魁祸首。

如果您的代码特别复杂或者重现此代码所需的步骤很长,您可以使用两者的组合 - 缩小有问题的代码部分,然后在损坏的内存位置上放置一个断点。

大卫