0

我正在追逐内存堆损坏错误。我所拥有的是据称在释放后被修改的内存地址。 Windows主要做了触发退出一个断点,我在输出窗口中看到错误消息如下:Visual Studio(VC++ 2005)调试内存

HEAP[myprogram.exe]: HEAP: Free Heap block df56c20 modified at df56c80 after it was freed 

我的问题是在准确点当Windows触发断点,我可以追溯到在我的代码点对应与这个地址相关的数据?这至少有助于调试。感谢关于如何做到这一点的任何想法。我读http://msdn.microsoft.com/en-us/library/s3aw423e.aspx,但是我怎么能够做我想做的事情并不十分清楚。谢谢!

回答

1

您可以在内存地址设置断点。只需进入断点窗口并添加一个新的数据断点即可。如果您发现每次运行的相同地址发生腐败,这可以提供帮助。

但是有这样的问题,问题很可能在其他地方。常见原因来自未定义的行为。寻找:

  • 双删除
  • 没有从功能
  • 阵列中的
  • 写入内存会出界回你没有自己
+0

感谢@Luchian:我只是试过,但到那时,代码似乎是Windows库ntdll.dll没有调用堆栈返回到我的应用程序,问题是这个地址不是每次运行修复;所以我不知道它的先验十六进制表示。如果我知道先验,我甚至会在开始调试之前就开始使用它。有什么建议么? –

+0

@ squashed.bugaboo删除代码,直到您不再受到损坏。这应该缩小它的范围。 –

+0

谢谢@Luchian:好的。我明白了,所以你基本上是在暗示(我推迟了什么),以恢复到没有错误的代码的工作版本。我说的是对的吗? –