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)

正確には何が問題ですか?

このアプリケーションを実行すると、セグメンテーション違反エラーが発生して終了します。これは、AMD GLES SDKforDesktopでコンパイルされたOpenGLES2.0アプリケーションです。

これは、このアプリケーションのソースです。

4

1 に答える 1

9

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

もちろん、本当の問題はその理由ですが、それはプロプライエタリのクローズドソースコードであるため、簡単に見つける方法はありません。関数ポインタをコールバックとして受け取るコード内の関数を呼び出す場合は、それらにnullポインタを渡さないようにすることをお勧めします。

基本的に、これはvalgrindが私が恐れていることを見つけるのに役立つ可能性が高い問題ではありませんが、それは確かにメモリリークとは何の関係もありません。

于 2012-09-14T09:17:34.077 に答える