Проблема с перезаписью памяти

У меня есть одно приложение на С-коде. который я строил с использованием MS-VS2005. У меня был один буфер выходных данных, который распределялся динамически с помощью malloc.

Для некоторых тестовых случаев объем памяти, который был malloc 'Значение d было меньше, чем фактический размер вывода в байтах, который был сгенерирован. Вывод большего размера записывался в буфер меньшего размера, вызывая переполнение буфера. В результате этого тестового запуска произошел сбой с MSVS-2005, показывая окно "Куча коррупции ....

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

Мой вопрос:

1.) Какие инструменты я могу использовать для обнаружения таких условий переполнения буфера динамической памяти. Могут ли они также помочь обнаружить любые условия переполнения буфера (независимо от того, находится ли буфер / массив в куче, стеке, глобальной области памяти)?

2.) Помогут ли в данном случае инструменты утечки памяти (например, Purify) или инструменты анализа кода, такие как lint, klocworks? Я считаю, что они должны быть инструментами анализа времени выполнения.

Спасибо.

-ОБЪЯВЛЕНИЕ.

Ответы на вопрос(4)

Ваш ответ на вопрос