2012-09-12 13 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) 

問題は何ですか?valgrindは「無効なアドレスにジャンプする」とはどういう意味ですか?

私がこのアプリケーションを実行すると、セグメンテーションフォールトエラーが発生して終了します。デスクトップ用AMD GLES SDKでコンパイルされたOpenGL ES 2.0アプリケーションです。

This the sourceこのアプリケーションの場合。

+0

これは一般的なデバッガで実行してみましたか?これはメモリリークのようには見えませんが、何らかの種類のヌルポインタ例外です.ValgrindがNPEのデバッグに適切なツールであるかどうかはわかりません。 – Tim

+0

@Tim私はこのOpenGL ESライブラリのデバッグバージョンを持っていませんし、デバッグライブラリなしで使うことができる他のツールはよくわかりません。 – Ken

+0

私はOGLESライブラリをデバッグする必要はないと思っていますが、それを呼び出すアプリケーションがAPI呼び出しにnull値を渡していないことを確認してください。特定の言語で使用されているIDEのコードをステップ実行するだけで済みます。 – Tim

答えて

9

/usr/lib/fglrx/dri/fglrx_dri.soのコードがヌル関数ポインタをジャンプしています。

もちろん、本当の疑問があるのはなぜですか、それは独占クローズドソースコードなので、簡単に見つけ出す方法はありません。コールバックとして関数ポインタをとるコード内の関数を呼び出す場合、それらにヌルポインタを渡していないことを確認することは良いスタートになります。

これはvalgrindが私を恐れていると感じるのを助ける可能性があることは基本的に問題ではありませんが、確かにメモリリークとは関係ありません。

関連する問題