2009-04-19 4 views
1

...왜 Valgrind는 내 glutCreateWindow 사용을 좋아하지 않습니까? 나는 다음과 같은 코드를 사용하고

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 변수() 및 타이틀의 값으로 초기화된다 생성자 부재 초기화리스트 초기화 반원 ...

class VimridApplication 
{ 
    // ... 

public: 
    std::string Title; 

    // ... 
} 

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

class GlutApplication : public VimridApplication 
{ 
    // ... 
} 

답변

4

Valgrind에는 몇 가지 기본 오류 억제 기능이 있지만 libCLcore를 다루지는 않습니다.

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

코드와 관련이없는 자신 만의 error suppressions을 만들 수 있습니다.

2

는 그냥 무시이고; 보시다시피, 초기화되지 않은 값은 OpenGL 라이브러리에서 코드 아래에 사용되며, 초기화되지 않은 데이터는 아닙니다. 파고 들기를 원할지도 모르지만 (여전히 거짓 긍정 일 수 있음), 혼자 남겨 둘 수도 있습니다.

+1

문제의 원인을 찾으려고 할 때 --track-origins는 2009 년 1 월 2 일 릴리스 3.4.0의 새로운 기능입니다. 동일한 문제가 있었는데 초기화되지 않은 값은 다음과 같은 이유로 생성되었습니다. libglut의 fgOpenWindow에 스택 할당. 패치 업스트림을 보내는 것 이외에는 많은 것을 할 수 없으므로이를 억제하는 것이 안전합니다. – jwhitlock

관련 문제