Domanda

Sto utilizzando il seguente codice ...

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

... Valgrind mi dà il seguente ...

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

Ma che cosa non è inizializzato? La variabile titolo viene inizializzata con il valore di Title.c_str () e il titolo è un membro della classe che viene inizializzata nella lista di inizializzazione di membri del costruttore ...

class VimridApplication
{
    // ...

public:
    std::string Title;

    // ...
}

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

class GlutApplication : public VimridApplication
{
    // ...
}
È stato utile?

Soluzione

Valgrind è dotato di una certa soppressione errore predefinito, ma che probabilmente non copre libCLcore.

  

Gli strumenti di controllo degli errori rilevare numerosi problemi nelle librerie di base, come ad esempio la libreria GNU C, e le librerie client X11, che vengono pre-installato sul sistema GNU / Linux. Non si può facilmente risolvere questi, ma non si vuole vedere questi errori (e sì, ci sono molti!) Così Valgrind legge un elenco di errori di sopprimere all'avvio. Un file di soppressione di default viene creato dallo script ./configure quando il sistema è costruito.

È possibile creare il proprio che si sa sono irrilevanti al codice.

Altri suggerimenti

Basta ignorare questo; come si può vedere, il valore non inizializzato viene utilizzato molto al di sotto il codice nella libreria OpenGL, e probabilmente non è i dati che è inizializzata. Si potrebbe desiderare di scavare in esso (può ancora essere un falso positivo), ma si potrebbe anche lasciar perdere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top