Erreur manquante dans Valgrind

(le post original était ici )

Considérez le programme clairement bogué suivant:

#include  int main() { char ssortingng1[10] = "123456789"; char *ssortingng2 = "123456789"; strcat(ssortingng1, ssortingng2); } 

et supposons le comstackr:

 gcc program.c -ggdb 

et lancez valgrind dessus:

 valgrind --track-origins=yes --leak-check=yes --tool=memcheck --read-var-info=yes ./a.out 

Dans le résultat, aucune erreur n’est affichée:

 ==29739== Memcheck, a memory error detector ==29739== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. ==29739== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info ==29739== Command: ./a.out ==29739== ==29739== ==29739== HEAP SUMMARY: ==29739== in use at exit: 0 bytes in 0 blocks ==29739== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==29739== ==29739== All heap blocks were freed -- no leaks are possible ==29739== ==29739== For counts of detected and suppressed errors, rerun with: -v ==29739== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2) 

Qu’est-ce que je rate?

Il n’a signalé aucune anomalie, car vous utilisiez memcheck , qui n’effectue pas de contrôle sur les baies globales ou de stack, mais uniquement sur les limites et les vérifications d’utilisation après memcheck . Donc, dans ce cas, vous pouvez utiliser valgrind SGCheck pour vérifier les masortingces de stack:

 valgrind --tool=exp-sgcheck ./a.out 

Il rapporte effectivement l’erreur pour moi.

Pour plus d’informations, reportez-vous à la documentation sgcheck:

http://valgrind.org/docs/manual/sg-manual.html

ajout du journal:

 $ valgrind --tool=exp-sgcheck ./a.out ==10485== exp-sgcheck, a stack and global array overrun detector ==10485== NOTE: This is an Experimental-Class Valgrind Tool ==10485== Copyright (C) 2003-2015, and GNU GPL'd, by OpenWorks Ltd et al. ==10485== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==10485== Command: ./a.out ==10485== ==10485== Invalid read of size 1 ==10485== at 0x4C2A374: strlen (h_intercepts.c:131) ==10485== by 0x4E9DD5B: puts (in /usr/lib64/libc-2.22.so) ==10485== by 0x4005C8: main (vc:11) ==10485== Address 0xfff00042a expected vs actual: ==10485== Expected: stack array "ssortingng1" of size 10 in frame 2 back from here ==10485== Actual: unknown ==10485== Actual: is 0 after Expected ==10485== ==10485== Invalid read of size 1 ==10485== at 0x4EA9BA2: _IO_default_xsputn (in /usr/lib64/libc-2.22.so) ==10485== by 0x4EA7816: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib64/libc-2.22.so) ==10485== by 0x4E9DDF7: puts (in /usr/lib64/libc-2.22.so) ==10485== by 0x4005C8: main (vc:11) ==10485== Address 0xfff00042a expected vs actual: ==10485== Expected: stack array "ssortingng1" of size 10 in frame 3 back from here ==10485== Actual: unknown ==10485== Actual: is 0 after Expected ==10485== 123456789123456789 ==10485== ==10485== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)