Повреждение кучи или повреждение стека - PullRequest
1 голос
/ 08 мая 2011

Мое приложение вылетает из-за некоторых проблем. Стек вызовов доступен для сбоя. Как узнать, является ли сбой из-за повреждения кучи или стека, глядя на стек вызовов?

Ответы [ 3 ]

1 голос
/ 08 мая 2011

Вы можете использовать valgrind для проверки утечек памяти в вашей программе.

Или, что еще лучше, используйте ddd / gdb для просмотра и просмотра. В любом случае, это трудно понять, не взглянув на результат valgrind.

Обычно, если проблема связана с указателем, это происходит из-за повреждения кучи.

НТН,
Шрирам

0 голосов
/ 28 ноября 2012

Используйте встроенную отладку в Windows, поместив следующую строку в начало main (при использовании Win32):

_CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF|_CRTDBG_LEAK_CHECK_DF|_CRTDBG_CHECK_CRT_DF|
         _CRTDBG_DELAY_FREE_MEM_DF |_CRTDBG_ALLOC_MEM_DF);

Это будет прервано, если возникнет проблема.Однако я нашел Microsoft Application Verifier простым в использовании и очень полезным.Иногда меня уводят прямо на оскорбительную линию, порождая коррупцию.Вам необходимо скачать верификатор приложений от Microsoft:

http://www.microsoft.com/en-us/download/details.aspx?id=20028

Затем установить и найти исполняемый файл в папке Windows \ System32, вызвать appverif.exe.Укажите на свой исполняемый файл, а затем запустите приложение в режиме отладки, как это обычно делается в Visual Studio.Visual Studio сломается в том месте, где обнаружена проблема (реальная причина может быть в другом месте, но если вы знаете, что делает ваш код, вы должны знать, что происходит).

0 голосов
/ 08 мая 2011

Похоже, вы отправили почти один и тот же вопрос дважды, вероятно, не стоит этого делать.Поскольку вы работаете в среде Windows (я понял это из вашего другого поста), когда ваша программа падает, получите файл дампа (используйте VS или adplus для его создания).Как только у вас есть файл, загрузите его в windbg.Запустите "! Проанализировать -v".Если у вас повреждена куча, это будет указано в отчете об анализе.

Я видел слишком много раз, когда разработчик смотрел на сбой, который выглядит странно и просто объявлял ", так как яне знаю, что это, должно быть, куча коррупции ".4/5 раз, когда я им помогал (по крайней мере, таков мой опыт), это была простая логическая ошибка приложения.

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