문제

다음 코드를 사용하고 있습니다 ...

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

... Valgrind가 다음을 제공합니다 ...

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

그러나 초기화되지 않은 것은 무엇입니까? 제목 변수는 Title.c_str ()의 값으로 초기화되고 Title은 Constructor 멤버 초기화 목록에서 초기화되는 클래스 멤버입니다 ...

class VimridApplication
{
    // ...

public:
    std::string Title;

    // ...
}

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

class GlutApplication : public VimridApplication
{
    // ...
}
도움이 되었습니까?

해결책

Valgrind에는 기본 오류 억제가 제공되지만 Libclcore를 다루지 않을 것입니다.

오류 확인 도구는 GNU C 라이브러리와 같은 기본 라이브러리 및 GNU/Linux 시스템에 사전 설치된 X11 클라이언트 라이브러리와 같은 수많은 문제를 감지합니다. 당신은 이것을 쉽게 해결할 수 없지만, 이러한 오류를보고 싶지는 않습니다 (예, 많은 것이 있습니다!) Valgrind는 시작시 억제 할 오류 목록을 읽습니다. 기본 억제 파일은 시스템을 구축 할 때 ./configure 스크립트에 의해 작성됩니다.

직접 만들 수 있습니다 오류 억제 당신이 알고있는 것은 당신의 코드와 관련이 없습니다.

다른 팁

이것을 무시하십시오. 보시다시피, 비 초기의 값은 OpenGL 라이브러리의 코드 아래에서 사용되며 초기화되지 않은 데이터가 아닐 수도 있습니다. 당신은 그것을 파고 들기를 원할 수도 있지만 (여전히 긍정적 일 수 있음), 당신은 그것을 내버려 둘 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top