2015-04-24 4 views
10
#include <stdio.h> 
main() 
{  
    char buf[8]; 
    sprintf(buf,"AAAA%3s","XXssssssssXXXsssssXXX"); 
    printf("%s\n",buf); 
} 

Я ожидал, что valgrind обнаружит переполнение буфера с помощью вышеуказанного кода. Но он не сообщает никаких ошибок или предупреждений. Нужно ли мне включать какие-либо специальные флаги?Valgrind не обнаруживает переполнение буфера

+3

С помощью компилятора 'gcc' или' clang' вы можете скомпилировать с помощью '-Wall -g -fsanitize = address', и он может дать сообщение во время выполнения. BTW 'sprintf' по своей сути небезопасен и не должен использоваться. Используйте 'snprintf' или' asprintf' –

+1

Смотрите наш инструмент CheckPointer; он найдет много ошибок памяти, которые не могут сделать valgrind. http://www.semdesigns.com/Products/MemorySafety –

ответ

14

От Valgrind Tutorial

Что Valgrind НЕ

Хотя Valgrind является чрезвычайно полезной программой, она не будет чудесным образом рассказать вам о каждой ошибке памяти в вашей программе. Есть несколько ограничений, которые вы должны иметь в виду. Он не выполняет проверку границ стека/статических массивов.

Смежные вопросы