VC ++ 6.0 - трассировка стека WinDbg показывает точку сбоя в malloc - PullRequest
0 голосов
/ 14 декабря 2011

Трассировка стека в windbg после сбоя приложения выглядит следующим образом:

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

Пожалуйста, дайте мне знать, что означает этот ординал и почему free вызывается дважды?

1 Ответ

1 голос
/ 14 декабря 2011

Когда сбой происходит внутри malloc или free, причиной, скорее всего, является повреждение кучи.Возможно, причина повреждения произошла в коде, не связанном с текущим стеком.Чтобы проверить, не повреждена ли куча, используйте

!heap –s –v

. Для этого вам понадобятся символы, заранее используйте

.symfix

Возможно, вы вообще не свободны из-за отсутствияСимволы стек отображается со смещением до ближайшего экспорта, отсюда и большое смещение (бесплатно + 0x1cc). Проверьте стек после .symfix и наслаждайтесь!

Чтобы найти основную причину повреждения памяти, можно использовать разные подходы, но, если это возможно, полезна полная страница.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...