Visual Studio - как найти источник ошибок повреждения "кучи"

Интересно, существует ли хороший способ найти исходный код, который вызывает ошибку повреждения "кучи", учитывая адрес памяти данных, которые были записаны 'вне' выделенного блока "кучи" в Visual Studio;

Выделенный (0008) свободный элемент списка 26F7F670 является неправильным (мертвым) размером

(Пытающийся записать некоторые примечания по тому, как найти ошибки памяти),

Заранее спасибо!

32
задан Jean-François Côté 4 August 2014 в 12:30
поделиться

4 ответа

Может быть, вы можете попробовать Microsoft Application Verifier. Однажды он решил аналогичную проблему для меня, включив дополнительные проверки операций с кучей. На мой взгляд, случайность поврежденного адреса связана с тем, что куча может быть "незаметно" повреждена, а проблема не появится, пока с кучей не произойдет что-то серьезное (например, массовое выделение / освобождение).

3
ответ дан 27 November 2019 в 20:17
поделиться

Я предполагаю C ++ в качестве языка.

Если ошибка воспроизводима и поврежденный адрес всегда один и тот же, вы можете установить точку останова данных, чтобы остановить программу при записи по этому адресу.

1
ответ дан 27 November 2019 в 20:17
поделиться

Начните с установки windbg:

http://www.microsoft.com/whdc/Devtools/Debugging/default.mspx

Затем включите pageheap следующим образом:

gflags.exe –p /enable yourexecutable.exe /full

Это будет вставлять страницу без возможности записи после каждого выделения кучи.

После этого запустите исполняемый файл из windbg, любые записи за пределы кучи теперь будут отлавливаться этим отладчиком. Чтобы отключить страничную кучу после этого, используйте следующее:

gflags.exe -p /disable yourexecutable.exe

Больше информации о том, как использовать страничную кучу здесь.

57
ответ дан 27 November 2019 в 20:17
поделиться

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

2
ответ дан 27 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: