Niedawno opracowałem nawyk uruchamiania wszystkich moich programów przez valgrind
, aby sprawdzić wycieki pamięci, ale większość jej wyników była dla mnie trochę zagadkowa.Błędy Valgrind, mimo że wszystkie bloki sterty zostały zwolnione.
Dla mojego ostatniego biegu, valgrind -v
dał mi:
All heap blocks were freed -- no leaks are possible
Oznacza to, że mój program objęła dla pamięci przecieki, prawda?
Co oznacza ten błąd? Czy mój program nie odczytuje poprawnie niektórych bloków pamięci?
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 14 from 9)
1 errors in context 1 of 1:
Invalid read of size 4
at 0x804885B: findPos (in /home/a.out)
by 0xADD918: start_thread (pthread_create.c:301)
by 0xA26CCD: clone (clone.S:133)
Address 0x4a27108 is 0 bytes after a block of size 40 alloc'd
at 0x4005BDC: malloc (vg_replace_malloc.c:195)
by 0x804892F: readInput (in /home/a.out)
by 0xADD918: start_thread (pthread_create.c:301)
by 0xA26CCD: clone (clone.S:133)
used_suppression: 14 dl-hack3-cond-1
Co to są tak zwane "tłumione" błędy?
Jest to jeden z pominiętych błędów, po prostu dał mi "1 błąd pomijany", gdy użyłem valgrind bez -v. Więc to nie jest mój ból głowy, prawda? –
@ crypto: masz na myśli błąd w 'findPos'? Nie, ten jest naprawdę, to jest twój kod, który robi coś złego. Bez samego kodu mogę się tylko domyślać, ale od nazywania funkcji przypuszczam, że to skanuje tablicę i przebiega poza przydzieloną granicę w jakiejś sprawie granicznej. Skompiluj z '-g' i valgrind powie Ci dokładną linię. –
Ale ostateczna lokalizacja błędu jest określona jako klon.S, nad którym nie mam kontroli. –