Ошибка переполнения буфера в проекте, преобразованном из VS2005 в VS2008 - PullRequest
0 голосов
/ 13 января 2011

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 2011

Из-за различий в поведении sprintf, строка с нулевым символом в конце была записана за пределами массива.Это, в свою очередь, повредило стек и привело к переполнению буфера.Ключ / GS в Visual Studio сообщает о переполнении буфера и, таким образом, может помочь выяснить причину сбоя системы.

0 голосов
/ 13 января 2011

Я предполагаю, что вы используете c ++.

В Microsoft C ++ есть переключатель компилятора /GS, чтобы выяснить, есть ли переполнения буфера. Подробнее и как это работает см. Проверка безопасности компилятора MSDN в глубину .

По крайней мере в c # -developpment (но, надеюсь, также и в c ++) есть опция отладчика «Прерывать, когда возникает исключение ...», которое останавливает выполнение программы, если выбрасывается исключение (поскольку среда выполнения c ++ обнаружила переполнение буфера. В vs2010 он находится в разделе Отладка / Исключения ...

Вы также можете использовать Microsoft PREfast , который сканирует ваш исходный код на наличие потенциально небезопасных функций (strcpy)

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