【发布时间】:2012-07-24 17:54:32
【问题描述】:
VS2008,C。还使用了一些预构建的库。 当我在调试器中单步执行我的代码并遍历被调用的库函数时,我得到了这个:
HEAP[unit_test.exe]:堆缺少提交范围内的最后一个条目 35c70 Windows 在 unit_test.exe 中触发了断点。
这可能是由于堆损坏,这表明存在错误 unit_test.exe 或它已加载的任何 DLL。
这也可能是由于用户在 unit_test.exe 有 重点。
输出窗口可能有更多的诊断信息。
关于如何调试的任何想法?
更新:我重构了代码,发现在执行 printf() 时出现了弹出窗口。当有一个 free() 时,我也得到它。我注释掉了这些行,现在当有一个 malloc() 时,我得到了堆损坏弹出对话框。
【问题讨论】:
-
您应该更具体:您使用的是哪个库和哪个函数?
-
有几个选项可供您使用,具体取决于您的代码到底是什么样的。如果您直接分配和修改堆空间,那么您可以在调试器中在您的一个指针上设置一个观察点,并尝试查看您的某些操作是否在做他们不应该做的事情,例如溢出缓冲区。
-
@AlcoJaguar 我正在调用 malloc 和免费(平台是 Windows XP)。你的意思是把手表放在所有的指针上吗?
-
我不会说所有的指针,因为这取决于您的应用程序,可能需要筛选大量信息。您可能首先要做的是将调查范围缩小到相对较小的代码段,当您输入它时,没有堆损坏的迹象,而当您退出时,您会遇到错误。那将是在指针上设置观察点的好地方。
-
您是否使用应用程序验证程序来测试堆损坏? Application Verifier 是 Microsoft 提供的免费工具,可帮助识别资源泄漏和堆损坏。您可以在 url 找到 App Verifier:microsoft.com/en-us/download/… 您可以从technet.microsoft.com/en-us/library/bb457063.aspx 了解如何启用它以解决堆损坏和其他问题。这是我能想到的唯一可能对您有用的东西。
标签: c windows-xp heap-corruption