#include <stdio.h>
main()
{
char buf[8];
sprintf(buf,"AAAA%3s","XXssssssssXXXsssssXXX");
printf("%s\n",buf);
}
Я ожидал, что valgrind обнаружит переполнение буфера с помощью вышеуказанного кода. Но он не сообщает никаких ошибок или предупреждений. Нужно ли мне включать какие-либо специальные флаги?Valgrind не обнаруживает переполнение буфера
С помощью компилятора 'gcc' или' clang' вы можете скомпилировать с помощью '-Wall -g -fsanitize = address', и он может дать сообщение во время выполнения. BTW 'sprintf' по своей сути небезопасен и не должен использоваться. Используйте 'snprintf' или' asprintf' –
Смотрите наш инструмент CheckPointer; он найдет много ошибок памяти, которые не могут сделать valgrind. http://www.semdesigns.com/Products/MemorySafety –