2012-09-12 37 views
9
valgrind --leak-check=full ./CH02_HelloTriangle 
==11404== Memcheck, a memory error detector 
==11404== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. 
==11404== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info 
==11404== Command: ./CH02_HelloTriangle 
==11404== 
==11404== Jump to the invalid address stated on the next line 
==11404== at 0x0: ??? 
==11404== by 0x6F9271A: ??? (in /usr/lib/fglrx/dri/fglrx_dri.so) 
==11404== Address 0x0 is not stack'd, malloc'd or (recently) free'd 
==11404== 
==11404== 
==11404== Process terminating with default action of signal 11 (SIGSEGV) 
==11404== Bad permissions for mapped region at address 0x0 
==11404== at 0x0: ??? 
==11404== by 0x6F9271A: ??? (in /usr/lib/fglrx/dri/fglrx_dri.so) 
==11404== 
==11404== HEAP SUMMARY: 
==11404==  in use at exit: 144,423 bytes in 407 blocks 
==11404== total heap usage: 1,009 allocs, 602 frees, 189,993 bytes allocated 
==11404== 
==11404== LEAK SUMMARY: 
==11404== definitely lost: 0 bytes in 0 blocks 
==11404== indirectly lost: 0 bytes in 0 blocks 
==11404==  possibly lost: 0 bytes in 0 blocks 
==11404== still reachable: 144,423 bytes in 407 blocks 
==11404==   suppressed: 0 bytes in 0 blocks 
==11404== Reachable blocks (those to which a pointer was found) are not shown. 
==11404== To see them, rerun with: --leak-check=full --show-reachable=yes 
==11404== 
==11404== For counts of detected and suppressed errors, rerun with: -v 
==11404== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 2 from 2) 
Segmentation fault (core dumped) 

Vấn đề chính xác là gì?Valgrind có nghĩa là gì bởi "chuyển đến địa chỉ không hợp lệ" ở đây?

Nếu tôi chạy ứng dụng này, nó chỉ thoát với lỗi lỗi phân đoạn, đó là ứng dụng OpenGL ES 2.0 được biên dịch với AMD GLES SDK cho máy tính để bàn.

This the source cho ứng dụng này.

+0

Bạn đã thử chạy dưới một trình gỡ lỗi điển hình chưa? Điều này không giống như một rò rỉ bộ nhớ, mà là một số loại ngoại lệ con trỏ null, và tôi không chắc liệu Valgrind có phải là công cụ thích hợp để gỡ lỗi NPE hay không. – Tim

+0

@Tim tôi không có phiên bản gỡ lỗi của thư viện ES OpenGL này và tôi không biết các công cụ khác tốt cho việc này mà tôi có thể sử dụng mà không cần thư viện gỡ lỗi. – Ken

+0

Tôi không nghĩ rằng bạn cần phải gỡ lỗi thư viện OGLES, nhưng thay vì chỉ cần đảm bảo rằng ứng dụng của bạn mà nó gọi nó không vượt qua giá trị null cho các cuộc gọi api. Bạn chỉ có thể bước qua mã trong bất kỳ IDE nào mà ngôn ngữ cụ thể của bạn sử dụng. – Tim

Trả lời

9

Mã trong /usr/lib/fglrx/dri/fglrx_dri.so nhảy qua con trỏ hàm rỗng.

Tất nhiên câu hỏi thực sự là lý do tại sao, nhưng vì đó là mã nguồn đóng độc quyền, bạn không có cách nào dễ dàng tìm ra. Nếu bạn đang gọi bất kỳ chức năng nào trong đoạn mã đó lấy các con trỏ hàm như là các cuộc gọi lại thì chắc chắn rằng bạn không truyền các con trỏ null cho chúng sẽ là một khởi đầu tốt.

Về cơ bản mặc dù đây không phải là vấn đề mà valgrind có thể giúp bạn tìm thấy tôi sợ, và nó chắc chắn không phải là bất cứ điều gì để làm với một rò rỉ bộ nhớ.

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