0

我正在追逐一个内存堆损坏错误。我所拥有的只是据称在被释放后被修改的内存地址。Windows 基本上会在退出时触发断点,我在输出窗口中看到如下错误消息:

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 ,但我不太清楚如何去做我想做的事。谢谢!

4

2 回答 2

1

您可以在内存地址处设置断点。只需转到断点窗口并添加一个新的数据断点。如果您看到每次运行都在同一地址发生损坏,这会有所帮助。

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

  • 双重删除
  • 不从函数返回
  • 在数组中越界
  • 写入你不拥有的记忆
于 2012-06-15T22:47:56.590 回答
0

使用Application Verifier并启用 PageHeap。这将在内存损坏后立即进入调试器。

于 2012-06-16T20:06:28.597 回答