Pergunta

Eu estou usando o código a seguir ...

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

... Valgrind me dá o seguinte ...

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

Mas o que é inicializado? A variável título é inicializado com o valor de Title.c_str () e Título é um membro da classe que é inicializado na lista de inicialização membro do construtor ...

class VimridApplication
{
    // ...

public:
    std::string Title;

    // ...
}

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

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

Solução

Valgrind vem com alguma supressão de erro padrão, mas que provavelmente não cobre libCLcore.

As ferramentas de verificação de erros detectar inúmeros problemas nas bibliotecas de base, tais como a biblioteca GNU C, e as bibliotecas do cliente X11, que vêm pré-instalados em seu sistema GNU / Linux. Você não pode facilmente corrigir isso, mas você não quer ver estes erros (e sim, há muitos!) Então Valgrind lê uma lista de erros para suprimir na inicialização. Um arquivo de supressão padrão é criado pelo script ./configure quando o sistema é construído.

Você pode criar seu próprio supressões de erro que você sabe são irrelevantes para o seu código.

Outras dicas

Apenas ignorar este; como você pode ver, o valor não inicializado é forma utilizada abaixo o seu código na biblioteca OpenGL, e é provavelmente não seus dados que não inicializado. Você pode querer cavar para ele (ele ainda pode ser um falso positivo), mas você pode muito bem deixá-lo sozinho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top