如果您使用过 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,看起来未初始化的变量正在传递给该行的函数。简单的!