Valgrind zgłasza wyciek pamięci w systemie OS X 10.8.1
Używam Valgrind w wersji 3.8.0 na OS X 10.8.1, Mountain Lion. Odnośnie kompatybilności z 10.8.1,Strona Valgrinda mówi (kursywa moja):
Valgrind 3.8.0 działa {x86, amd64} -darwin (Mac OS X 10.6 i 10.7, z ograniczoną obsługą 10.8).
Wiem więc, że istnieje tylko „ograniczone wsparcie” dla 10.8.1. Niemniej jednak,ten raport o błędzie mówi (kursywa moja):
To(najnowsze wydanie 3.8.0) sprawiaValgrind skompiluj i uruchom małe programy na OSX 10.8. Ostrzegaj jednak, że nadal zapewnia większe aplikacje, a programy 32-bitowe w ogóle nie są poprawnie sprawdzane (większość błędów jest pomijana przez Memcheck).
W porządku. Więc Valgrind powinien działać, jeśli jest temperamentem, na 10.8.1. Więc teraz moje pytanie:
Udało mi się skompilować Valgrinda na 10.8.1 bez większych problemów, ale zobaczyłem dziwne wyniki, gdy uruchomiłem go na kilku małych programach w C. Aby spróbować zmniejszyć możliwe przyczyny tego problemu, ostatecznie napisałem następujący „program”:
int main () {
return 0;
}
Nie bardzo ekscytujące, i powiedziałbym, że jest mało miejsca na robaki. Następnie skompilowałem i uruchomiłem go przez Valgrind:
gcc testC.c
valgrind ./a.out
Oto moje dane wyjściowe:
==45417== Command: ./a.out
==45417==
==45417== WARNING: Support on MacOS 10.8 is experimental and mostly broken.
==45417== WARNING: Expect incorrect results, assertions and crashes.
==45417== WARNING: In particular, Memcheck on 32-bit programs will fail to
==45417== WARNING: detect any errors associated with heap-allocated data.
==45417==
--45417-- ./a.out:
--45417-- dSYM directory is missing; consider using --dsymutil=yes
==45417==
==45417== HEAP SUMMARY:
==45417== in use at exit: 58,576 bytes in 363 blocks
==45417== total heap usage: 514 allocs, 151 frees, 62,442 bytes allocated
==45417==
==45417== LEAK SUMMARY:
==45417== definitely lost: 8,624 bytes in 14 blocks
==45417== indirectly lost: 1,168 bytes in 5 blocks
==45417== possibly lost: 4,925 bytes in 68 blocks
==45417== still reachable: 43,859 bytes in 276 blocks
==45417== suppressed: 0 bytes in 0 blocks
==45417== Rerun with --leak-check=full to see details of leaked memory
==45417==
==45417== For counts of detected and suppressed errors, rerun with: -v
==45417== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Wiem, że Valgrind nie jest gotowy na czas główny w 10.8.1. Niemniej jednak chciałbym móc go tutaj wykorzystać - muszę go używać tylko w małych programach i nic nie jest krytyczne, jeśli chodzi o wyniki. Ale wyraźnie zgłasza mnóstwo wycieków w programie, który wydaje się bardzo mało prawdopodobny. A zatem:
Co mam zrobić, aby to naprawić?
Inne informacje:
Dodawanie celowo przeciekanej liczby całkowitejrobi zwiększ liczbę „zdecydowanie utraconych” o odpowiednie 4 bajty.Podobnie celowo wyciek połączenia do malloc, nie zwalniając pamięcirobi zwiększ odpowiednio liczbę alokacji sterty.Kompilowanie za pomocą-g
flagę, a następnie uruchomiony do Valgrind (aby zaadresowaćdSYM directory is missing
błąd) powoduje, że błąd zniknie, alenie zmienić problem zgłaszanych ton wycieków pamięci.