2009-04-19 17 views
1

...なぜValgrindは私のglutCreateWindowの使い方が気に入らないのですか?私は、次のコードを使用してい

169: const char *title = Title.c_str(); 
170: glutCreateWindow(title); 

は... Valgrindのは私に次のよう...

==28841== Conditional jump or move depends on uninitialised value(s) 
==28841== at 0x6FF7A4C: (within /usr/lib64/libGLcore.so.180.44) 
==28841== by 0x6FF81F7: (within /usr/lib64/libGLcore.so.180.44) 
==28841== by 0x7289B36: (within /usr/lib64/libGLcore.so.180.44) 
==28841== by 0x728A757: _nv000133gl (in /usr/lib64/libGLcore.so.180.44) 
==28841== by 0x4EAB9E9: (within /usr/lib64/libGL.so.180.44) 
==28841== by 0x4EAEA81: (within /usr/lib64/libGL.so.180.44) 
==28841== by 0x4EB1D81: (within /usr/lib64/libGL.so.180.44) 
==28841== by 0x4EA782B: glXCreateNewContext (in /usr/lib64/libGL.so.180.44) 
==28841== by 0x54DF9AA: fgOpenWindow (in /usr/lib64/libglut.so.3.8.0) 
==28841== by 0x54DE062: fgCreateWindow (in /usr/lib64/libglut.so.3.8.0) 
==28841== by 0x54DF300: glutCreateWindow (in /usr/lib64/libglut.so.3.8.0) 
==28841== by 0x4146CE: vimrid::glut::GlutApplication::Init() (GlutApplication.cpp:170) 

を与えるが、初期化されていない何ですか?タイトル変数がTitle.c_str()とタイトルの値で初期化されたことは、コンストラクタのメンバ初期化リストで初期化されたクラスのメンバ...

class VimridApplication 
{ 
    // ... 

public: 
    std::string Title; 

    // ... 
} 

VimridApplication::VimridApplication() : 
    Title("Untitled VimridApplication") 
{ 
    // ... 
} 

class GlutApplication : public VimridApplication 
{ 
    // ... 
} 

答えて

4

Valgrindにはデフォルトのエラー抑制機能が付いていますが、おそらくlibCLcoreには該当しません。

エラーチェックツールは、GNU CライブラリやGNU/LinuxシステムにプリインストールされているX11クライアントライブラリなど、ベースライブラリの多くの問題を検出します。これらのエラーを簡単に修正することはできませんが、これらのエラーは見たくありません(そうですが、多くあります)ので、起動時にエラーを表示するValgrindが表示されます。デフォルトの抑制ファイルは、システム構築時に./configureスクリプトによって作成されます。

自分のコードには関係のない独自のerror suppressionsを作成できます。

2

はただ、これを無視です。表示されているように、初期化されていない値はOpenGLライブラリのコードの下で使用され、おそらく初期化されていないデータではありません。あなたはそれを掘り下げたいかもしれません(それは依然として偽陽性かもしれませんが)。

+1

問題の原因を見つけようとすると、--track-originsは便利です。リリース3.4.0、2009年1月2日の新機能です。私は同じ問題を抱えていましたが、初期化されていない値はlibglutのfgOpenWindowにおけるスタック割り当て。パッチをアップストリームで送信する以外のことはできませんので、抑制することは安全です。 – jwhitlock

関連する問題