1

次のコードを使用しています...

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 変数は Title.c_str() の値で初期化され、Title はコンストラクターメンバー初期化リストで初期化されるクラスメンバーです...

class VimridApplication
{
    // ...

public:
    std::string Title;

    // ...
}

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

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

2 に答える 2

4

Valgrind にはいくつかのデフォルトのエラー抑制が付属していますが、おそらく libCLcore には対応していません。

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

コードとは無関係であることがわかっている独自のエラー抑制を作成できます。

于 2009-04-20T02:55:24.133 に答える
2

これは無視してください。ご覧のとおり、初期化されていない値は OpenGL ライブラリのコードの下で使用されており、初期化されていないのはおそらくデータではありません。掘り下げたいと思うかもしれませんが (それでも誤検知である可能性があります)、そのままにしておくこともできます。

于 2009-04-19T23:02:32.367 に答える