我正在使用以下代码......
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
{
// ...
}
答案 0 :(得分:4)
Valgrind带有一些默认的错误抑制,但这可能不包括libCLcore。
错误检查工具可以检测基础库中的许多问题,例如GNU C库和X11客户端库,这些库预装在GNU / Linux系统上。您无法轻松修复这些错误,但您不希望看到这些错误(是的,有很多错误!)因此,Valgrind会在启动时读取要抑制的错误列表。构建系统时,。/ configure脚本会创建默认抑制文件。
您可以创建自己的error suppressions,而这些{{3}}与您的代码无关。
答案 1 :(得分:2)
请忽略这一点;正如您所看到的,未初始化的值在OpenGL库中的代码下方使用,并且可能不是您的数据未初始化。你可能想深入研究它(它可能仍然是误报),但你也可以不管它。