Интересно, существует ли хороший способ найти исходный код, который вызывает ошибку повреждения "кучи", учитывая адрес памяти данных, которые были записаны 'вне' выделенного блока "кучи" в Visual Studio;
Выделенный (0008) свободный элемент списка 26F7F670 является неправильным (мертвым) размером
(Пытающийся записать некоторые примечания по тому, как найти ошибки памяти),
Заранее спасибо!
Может быть, вы можете попробовать Microsoft Application Verifier. Однажды он решил аналогичную проблему для меня, включив дополнительные проверки операций с кучей. На мой взгляд, случайность поврежденного адреса связана с тем, что куча может быть "незаметно" повреждена, а проблема не появится, пока с кучей не произойдет что-то серьезное (например, массовое выделение / освобождение).
Я предполагаю C ++ в качестве языка.
Если ошибка воспроизводима и поврежденный адрес всегда один и тот же, вы можете установить точку останова данных, чтобы остановить программу при записи по этому адресу.
Начните с установки 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
Больше информации о том, как использовать страничную кучу здесь.
Вы можете установить точку останова на запись в память адрес. Затем отладчик покажет вам код, который записывает в это место, но вам все равно нужно выяснить, какая из операций записи вызывает проблему.