{
char bufBef[32];
char buf[8];
char bufAfter[32];
sprintf(buf,"AAAAAAA\0");
buf[8]='\0';
printf("%s\n",buf);
}
В Windows 7 я скомпилировал программу с Visual Studio 2008 как отладочный проект.3 буфера соседние.Я нахожу их адреса с помощью отладчика следующим образом:
bufBef 0x001afa50
buf 0x001afa40
bufAfter 0x001afa18
Оператор "buf [8] = '\ 0'" записывает адрес из buf.Когда я запустил программу, операционная система сообщила: «Ошибка отладки: ошибка проверки во время выполнения # 2 - стек вокруг переменной« buf »поврежден».
Затем я скомпилировал его как проект выпуска.Он работает тихо, сообщение об ошибке не возникает.
Мой вопрос: как во время выполнения обнаружить переполнение буфера?