2011-12-28 15 views
16

Tôi đã phát triển triển khai thuần túy C danh sách FIFO (hàng đợi) trong các tệp fifo.hfifo.c và đã viết chương trình thử nghiệm testfifo.c mà tôi biên dịch thành ./bin/testfifo. Cấu trúc nút được xác định trong list.h.Các rò rỉ bị nén có ý nghĩa gì trong Valgrind?

tôi chạy chương trình của tôi qua Valgrind trên OS X 10.6 như thế này

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo 

và nhận được đầu ra sau

==54688== Memcheck, a memory error detector 
==54688== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. 
==54688== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info 
==54688== Command: bin/testfifo 
==54688== 
--54688-- bin/testfifo: 
--54688-- dSYM directory is missing; consider using --dsymutil=yes 
==54688== 
==54688== HEAP SUMMARY: 
==54688==  in use at exit: 88 bytes in 1 blocks 
==54688== total heap usage: 11 allocs, 10 frees, 248 bytes allocated 
==54688== 
==54688== LEAK SUMMARY: 
==54688== definitely lost: 0 bytes in 0 blocks 
==54688== indirectly lost: 0 bytes in 0 blocks 
==54688==  possibly lost: 0 bytes in 0 blocks 
==54688== still reachable: 0 bytes in 0 blocks 
==54688==   suppressed: 88 bytes in 1 blocks 
==54688== 
==54688== For counts of detected and suppressed errors, rerun with: -v 
==54688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 

Theo bản tóm tắt rò rỉ, không có rò rỉ, nhưng tôi vẫn tự hỏi những "rò rỉ" rò rỉ là gì. Bên cạnh đó, số lượng phân bổ và miễn phí không phù hợp, và do đó tôi không chắc chắn nếu có rò rỉ hay không.

---- EDIT ----

Chạy

valgrind --tool=memcheck --leak-check=full --show-reachable=yes -v ./bin/testfifo 

trên OS X 10.6 tạo ra một sản lượng khá dài và khó hiểu, nhưng tôi đã chạy

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo 

trên máy Linux một sản phẩm này có:

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

phân bổ và tự do bây giờ khớp với, vì vậy phân bổ bổ sung trên OS X có vẻ là do một số thư viện hệ thống, như đã được đề xuất.

Tôi đã chạy lệnh rất giống với tùy chọn -v, để tiết lộ 4 lỗi bị chặn, nhưng tôi chưa có bất kỳ thông tin mới dễ hiểu nào.

Trả lời

20

Đó là những rò rỉ bên ngoài mã của bạn, trong thư viện (có thể được chia sẻ) hoặc các xác thực sai đã biết. Chạy valgrind với -v sẽ thông báo cho bạn về các biện pháp ngăn chặn được sử dụng.

+7

Công cụ kiểm tra lỗi phát hiện nhiều sự cố trong thư viện hệ thống, chẳng hạn như thư viện C, được cài đặt sẵn với hệ điều hành của bạn. Bạn không thể dễ dàng sửa chữa chúng, nhưng bạn không muốn thấy những lỗi này (và có, có rất nhiều!) Vì vậy, Valgrind đọc một danh sách các lỗi để triệt tiêu khi khởi động. Tệp nén mặc định được tạo bởi tập lệnh ./configure khi hệ thống được xây dựng. – Sjoerd

+2

Một số trong số này cũng không phải là vấn đề với thư viện, nhưng đối với các thư viện được biết là chia sẻ bộ nhớ giữa các quá trình có khả năng bên ngoài ứng dụng của bạn. –

+0

@MichaelMior Yup, tôi đã thấy dương tính giả với memcheck. – cnicutar

Các vấn đề liên quan