VC++ 6.0 - трассировка стека WinDbg показывает точку сбоя в malloc
Трассировка стека в windbg после сбоя приложения выглядит следующим образом:
ntdll+0x11766
msvcrt!free+0x1ae
msvcrt!free+0x1cc
msvcrt!malloc+0x27
mfc42!Ordinal823+0x2f
Пожалуйста, дайте мне знать, что означает этот ординал и почему дважды вызывается free?
1 ответ
Когда сбой происходит внутри malloc или free, причиной, скорее всего, является повреждение кучи. Причина повреждения могла быть в коде, не связанном с текущим стеком. Чтобы проверить, не повреждена ли куча, используйте
!heap –s –v
Вам понадобятся символы для этого, заранее используйте
.symfix
Вы, вероятно, вообще не свободны, из-за отсутствия символов стек отображается со смещением до ближайшего экспорта, поэтому большое смещение (free+0x1cc) Проверьте стек после.symfix и наслаждайтесь!
Чтобы найти основную причину повреждения памяти, можно использовать разные подходы, но, если это возможно, полезна куча страниц.