WinDbg堆栈跟踪显示了malloc的崩溃点

VC++ 6.0 - WinDbg stack trace shows a crash point at malloc

本文关键字:崩溃 malloc 堆栈 跟踪 显示 WinDbg      更新时间:2023-10-16

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

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

请让我知道这个序数是什么意思,为什么调用两次free ?

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

!heap –s –v

您将需要符号,提前使用

.symfix

由于缺少显示堆栈的符号,您可能根本没有空闲对最近的导出进行偏移,因此偏移量很大(free+0x1cc)检查.symfix之后的堆栈,享受吧!

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