C ++堆损坏

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

HEAP CORRUPTION DETECTED:Normal Block(#1761)at 0x17DEB940。 CRT检测到应用程序在堆缓冲区结束后写入内存。

我一直在考虑所有我认为可能导致它的功能,但我很茫然。 有没有什么方法可以使用更高级的调试功能来追究?


它听起来像一个经典的内存损坏错误。 该平台将是有用的信息。 没有看到你的代码,它的复杂性有几种可能性:

  • 我将猜测运行时库将允许您直接从您的代码添加对堆验证代码的调用。 我建议在代码中的各个位置调用堆验证代码,以便找出出错的地方。 你会发现堆积不好的地方,你会知道在之前的通话中没问题。 如果需要,请继续缩小该窗口,然后查看发生问题的代码。

  • 如果相同的步骤完全损坏内存中的相同位置,则应该能够使用调试器在内存中设置断点(或观察点)。 其中一些变化可能是有意的,但你应该能够找出哪一个是罪魁祸首。

  • 如果你的代码特别复杂,或者需要重现这一点的步骤很长,你可以使用这两者的组合 - 缩小一段代码的问题,然后在破坏的内存位置放置一个断点。

    大卫


    在Linux上,我会推荐valgrind作为一个工具,告诉你到底出了什么问题。 您可以在这里查看一些Windows替代品。


    尝试用工具来捕捉它。

    听起来有点像一个经典的C错误。 你确定你不会在一段时间内写一个c数组(比如int [xyz])或for循环吗? 它不会导致任何错误,但是在很多空间中都会产生奇怪的效果,这些空间与错误所在的部分无关。 :p

    链接地址: http://www.djcxy.com/p/14445.html

    上一篇: C++ Heap Corruption

    下一篇: Heap corruption under Win32; how to locate?