VC ++ 6.0 - WinDbg堆栈跟踪显示malloc的崩溃点

时间:2011-12-14 09:41:22

标签: c++ windows windbg vc6

应用程序崩溃后windbg中的堆栈跟踪如下:

ntdll+0x11766
msvcrt!free+0x1ae
msvcrt!free+0x1cc
msvcrt!malloc+0x27
mfc42!Ordinal823+0x2f

请让我知道这个序数是什么意思以及为什么免费被调用两次?

1 个答案:

答案 0 :(得分:1)

当崩溃在malloc或free内时,原因很可能是堆损坏。 腐败的原因可能发生在与当前堆栈无关的代码中。 要验证堆是否已损坏,请使用

!heap –s –v

您需要提前使用符号

.symfix

由于缺少显示堆栈的符号,您可能根本不是免费的 偏移到最近的出口,因此大偏移(免费+ 0x1cc) 在.symfix之后检查堆栈并享受!

要找到内存损坏的根本原因,可以使用不同的方法,但如果可能的话,整页堆是一个很好的方法。