Dois-je m'inquiéter au sujet de “saut Conditionnel ou déplacer dépend non initialisée valeur(s)”?

Si vous avez utilisé Memcheck (à partir de Valgrind), vous allez probablement être familier avec ce message...

Saut conditionnel ou déplacer dépend de la valeur non initialisée(s)

j'ai lu à ce sujet et il simplement se produit lorsque vous utilisez une valeur non initialisée.

MyClass s;
s.DoStuff();

Cela fonctionne parce que s est automatiquement initialisé... Donc si c'est le cas, et il fonctionne, pourquoi ne Memcheck me dire que c'est non initialisée? Le message devrait-il être ignoré?

Peut-être que j'ai mal compris où l'erreur a été de diriger moi. À partir de la Valgrind manuel, le erronée extrait est...

int main()
{
  int x;
  printf ("x = %d\n", x);
}

Cependant, dans mon code, je ne peux pas voir quoi que ce soit. J'ai remarqué cependant que la fonction en haut de la trace de la pile Memcheck me montre est une fonction virtuelle; cela pourrait-il être quelque chose à faire avec elle?

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

Mise à jour 1:

J'ai pris un coup d'oeil à GlutApplication.rpc:120, et il semble que la variable non initialisée a été transmis à une fonction sur cette ligne. Simple!

Ne MyClass dispose d'un constructeur?
Hmm, je pense que j'ai supposé trop ici, j'ai mis une ligne que je ne pense pas que c'est ce qui est à l'origine du problème... C'est la FinishRender fonction (je crois)...

OriginalL'auteur Nick Bolton | 2009-04-19