Pregunta

Estoy usando el siguiente código ...?

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

... Valgrind me da el siguiente ...

==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)

Pero lo que no está inicializado? La variable título se inicializa con el valor de Title.c_str () y el título es un miembro de la clase que se inicializa en la lista de inicialización del constructor miembro ...

class VimridApplication
{
    // ...

public:
    std::string Title;

    // ...
}

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

class GlutApplication : public VimridApplication
{
    // ...
}
¿Fue útil?

Solución

Valgrind viene con cierta supresión de error por defecto, pero que probablemente no cubre libCLcore.

  

Las herramientas de comprobación de errores detectan numerosos problemas en las bibliotecas de base, tales como la biblioteca de C de GNU, y las bibliotecas de cliente de X11, que vienen pre-instalados en su sistema GNU / Linux. No se puede arreglar fácilmente estos, pero no desea ver estos errores (y sí, hay muchos!) Así que Valgrind lee una lista de errores para suprimir en el arranque. Un archivo de supresión por defecto es creado por el script ./configure cuando el sistema está construido.

Usted puede crear su propia que sabe que son irrelevantes para su código.

Otros consejos

Simplemente ignorar esto; como se puede ver, el valor no inicializado se utiliza muy por debajo de su código en la biblioteca OpenGL, y no es probable que los datos que es inicializado. Es posible que desee profundizar en ella (todavía puede ser un falso positivo), pero que también podría dejarlo solo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top