Frage

Ich verwende den folgenden Code ...

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

... Valgrind gibt mir die folgende ...

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

Aber was nicht initialisiert ist? Die Titel Variable wird mit dem Wert von Title.c_str initialisiert () und Titel ist ein Klasse-Element, das im Konstruktor Initialisierungsliste initialisiert wird ...

class VimridApplication
{
    // ...

public:
    std::string Title;

    // ...
}

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

class GlutApplication : public VimridApplication
{
    // ...
}
War es hilfreich?

Lösung

Valgrind kommt mit einiger Standardfehlerunterdrückung, aber das ist wahrscheinlich libCLcore nicht abdeckt.

  

Die Fehlerprüfung Tools erkennen zahlreiche Probleme in den Basisbibliotheken, wie die GNU-C-Bibliothek und die X11-Client-Bibliotheken, die auf Ihrem GNU / Linux-System vorinstalliert. Sie können diese nicht leicht beheben, aber Sie wollen nicht, diese Fehler sehen (und ja, es gibt viele!) So Valgrind liest eine Liste der Fehler beim Start zu unterdrücken. Eine Standard-Unterdrückung Datei wird vom ./configure-Script erstellt, wenn das System aufgebaut wird.

Sie können Ihre eigenen Fehler Unterdrückungen erstellen dass Sie wissen, um Ihren Code nicht relevant sind.

Andere Tipps

Ignorieren Sie diese; wie Sie sehen können, ist der nicht initialisierten Wert weit unter dem Code in der OpenGL-Bibliothek verwendet, und es ist wahrscheinlich nicht die Daten, die nicht initialisiert sind. Sie könnten in sie graben wollen (es immer noch ein falsch positives Ergebnis sein kann), aber man kann es auch allein lassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top