Gần đây tôi đã phát triển một thói quen chạy tất cả các chương trình của mình thông qua valgrind
để kiểm tra rò rỉ bộ nhớ, nhưng hầu hết kết quả của nó hơi khó hiểu đối với tôi.Lỗi Valgrind mặc dù tất cả các khối đống đã được giải phóng
Đối với chạy mới nhất của tôi, đã cho tôi valgrind -v
:
All heap blocks were freed -- no leaks are possible
Điều đó có nghĩa chương trình của tôi được bảo hiểm cho bộ nhớ rò rỉ, phải không?
Lỗi này có nghĩa là gì? Chương trình của tôi có đọc chính xác các khối bộ nhớ không?
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
Ngoài ra, các lỗi "bị chặn" ở đây là gì?
Đây là một trong những lỗi bị chặn, nó chỉ cho tôi "1 lỗi bị chặn" khi tôi sử dụng valgrind mà không có -v. Vì vậy, nó không phải là đau đầu của tôi, phải không? –
@crypto: bạn có nghĩa là lỗi trong 'findPos'? Không cái này là thật, đây là mã của bạn đang làm điều gì đó sai. Nếu không có mã chính nó tôi chỉ có thể đoán, nhưng từ việc đặt tên của chức năng tôi đoán rằng điều này quét một mảng và chạy vượt ra ngoài giới hạn phân bổ trong một số trường hợp biên giới. Biên dịch với '-g' và valgrind sẽ cho bạn biết dòng chính xác. –
Nhưng vị trí cuối cùng của lỗi được ghi là clone.S, mà tôi không kiểm soát được. –