Memcheck (Valgrind から) を使用したことがある場合は、おそらくこのメッセージに精通しているでしょう...
条件付きジャンプまたは移動は、初期化されていない値に依存します
これについて読んだことがありますが、初期化されていない値を使用すると発生します。
MyClass s;
s.DoStuff();
は自動的に初期化されるため、これs
は機能します...これが事実であり、機能する場合、Memcheck はなぜ初期化されていないと通知するのでしょうか? メッセージを無視する必要がありますか?
おそらく、エラーがどこに向けられているのかを誤解していたのでしょう。Valgrindマニュアルから、実際の誤ったスニペットは...
int main()
{
int x;
printf ("x = %d\n", x);
}
ただし、私のコードでは、そのようなものは見られません。ただし、Memcheck が示すスタック トレースの先頭にある関数が仮想関数であることに気付きました。これは何か関係があるのでしょうか?
==14446== Conditional jump or move depends on uninitialised value(s)
==14446== at 0x414164: vimrid::glut::GlutApplication::FinishRender() (GlutApplication.cpp:120)
==14446== by 0x422434: vimrid::demos::filterdemos::FilterDemo3::Render() (FilterDemo3.cpp:260)
==14446== by 0x412D3D: vimrid::VimridApplication::UpdateAndRender() (VimridApplication.cpp:93)
==14446== by 0x4144BA: vimrid::glut::GlutApplication::glutHandleDisplay() (GlutApplication.cpp:201)
==14446== by 0x41486A: vimrid::glut::GlutApplication::glutCallbackDisplay() (GlutApplication.cpp:277)
==14446== by 0x54D9FAA: (within /usr/lib64/libglut.so.3.8.0)
==14446== by 0x54DDA4A: fgEnumWindows (in /usr/lib64/libglut.so.3.8.0)
==14446== by 0x54DA4A3: glutMainLoopEvent (in /usr/lib64/libglut.so.3.8.0)
==14446== by 0x54DAEB5: glutMainLoop (in /usr/lib64/libglut.so.3.8.0)
==14446== by 0x413FF8: vimrid::glut::GlutApplication::Run() (GlutApplication.cpp:112)
==14446== by 0x41249D: vimrid::Launcher::runDemo(vimrid::VimridSettings&) (Launcher.cpp:150)
==14446== by 0x412767: vimrid::Launcher::Launch(int, char**) (Launcher.cpp:62)
更新 1:
GlutApplication.cpp:120 を調べたところ、初期化されていない変数がその行の関数に渡されていたようです。単純!