2011-10-17 3 views
4

는 내가 가진 -g 옵션 & 실행을 함께 컴파일 할 때 하나 개의 프로그램Valgrind의 오류 : 조건부 점프 또는 이동은 초기화되지 않은 값 (들)

#include <stdio.h> 

int call(){ 
int x=25; 
++x; 
return x; 
} 

int main(){ 
int ptr; 
ptr=call(); 
printf("%d",ptr); 
return 0; 
} 

을 볼 수 Valgrind의이

==15469== 1 errors in context 1 of 8: 
==15469== Conditional jump or move depends on uninitialised value(s) 
==15469== at 0x546F83: _dl_relocate_object (in /lib/ld-2.12.90.so) 
==15469== by 0x53E6CC: dl_main (in /lib/ld-2.12.90.so) 
==15469== by 0x55094D: _dl_sysdep_start (in /lib/ld-2.12.90.so) 
==15469== by 0x540222: _dl_start (in /lib/ld-2.12.90.so) 
==15469== by 0x53B876: ??? (in /lib/ld-2.12.90.so) 
==15469== 
==15469== 
==15469== 1 errors in context 2 of 8: 
==15469== Conditional jump or move depends on uninitialised value(s) 
==15469== at 0x546E01: _dl_relocate_object (in /lib/ld-2.12.90.so) 
==15469== by 0x53E6CC: dl_main (in /lib/ld-2.12.90.so) 
==15469== by 0x55094D: _dl_sysdep_start (in /lib/ld-2.12.90.so) 
==15469== by 0x540222: _dl_start (in /lib/ld-2.12.90.so) 
==15469== by 0x53B876: ??? (in /lib/ld-2.12.90.so) 
==15469== 
==15469== 
==15469== 1 errors in context 3 of 8: 
==15469== Conditional jump or move depends on uninitialised value(s) 
==15469== at 0x546DF9: _dl_relocate_object (in /lib/ld-2.12.90.so) 
==15469== by 0x53E6CC: dl_main (in /lib/ld-2.12.90.so) 
==15469== by 0x55094D: _dl_sysdep_start (in /lib/ld-2.12.90.so) 
==15469== by 0x540222: _dl_start (in /lib/ld-2.12.90.so) 
==15469== by 0x53B876: ??? (in /lib/ld-2.12.90.so) 
==15469== 
==15469== 
==15469== 1 errors in context 4 of 8: 
==15469== Conditional jump or move depends on uninitialised value(s) 
==15469== at 0x546E01: _dl_relocate_object (in /lib/ld-2.12.90.so) 
==15469== by 0x53E7D9: dl_main (in /lib/ld-2.12.90.so) 
==15469== by 0x55094D: _dl_sysdep_start (in /lib/ld-2.12.90.so) 
==15469== by 0x540222: _dl_start (in /lib/ld-2.12.90.so) 
==15469== by 0x53B876: ??? (in /lib/ld-2.12.90.so) 
==15469== 
==15469== 
==15469== 1 errors in context 5 of 8: 
==15469== Conditional jump or move depends on uninitialised value(s) 
==15469== at 0x546DF9: _dl_relocate_object (in /lib/ld-2.12.90.so) 
==15469== by 0x53E7D9: dl_main (in /lib/ld-2.12.90.so) 
==15469== by 0x55094D: _dl_sysdep_start (in /lib/ld-2.12.90.so) 
==15469== by 0x540222: _dl_start (in /lib/ld-2.12.90.so) 
==15469== by 0x53B876: ??? (in /lib/ld-2.12.90.so) 
==15469== 
==15469== 
==15469== 2 errors in context 6 of 8: 
==15469== Conditional jump or move depends on uninitialised value(s) 
==15469== at 0x546F83: _dl_relocate_object (in /lib/ld-2.12.90.so) 
==15469== by 0x53E7D9: dl_main (in /lib/ld-2.12.90.so) 
==15469== by 0x55094D: _dl_sysdep_start (in /lib/ld-2.12.90.so) 
==15469== by 0x540222: _dl_start (in /lib/ld-2.12.90.so) 
==15469== by 0x53B876: ??? (in /lib/ld-2.12.90.so) 
==15469== 
==15469== 
==15469== 2 errors in context 7 of 8: 
==15469== Conditional jump or move depends on uninitialised value(s) 
==15469== at 0x547871: _dl_relocate_object (in /lib/ld-2.12.90.so) 
==15469== by 0x53E7D9: dl_main (in /lib/ld-2.12.90.so) 
==15469== by 0x55094D: _dl_sysdep_start (in /lib/ld-2.12.90.so) 
==15469== by 0x540222: _dl_start (in /lib/ld-2.12.90.so) 
==15469== by 0x53B876: ??? (in /lib/ld-2.12.90.so) 
==15469== 
==15469== 
==15469== 4 errors in context 8 of 8: 
==15469== Conditional jump or move depends on uninitialised value(s) 
==15469== at 0x546F4D: _dl_relocate_object (in /lib/ld-2.12.90.so) 
==15469== by 0x53E7D9: dl_main (in /lib/ld-2.12.90.so) 
==15469== by 0x55094D: _dl_sysdep_start (in /lib/ld-2.12.90.so) 
==15469== by 0x540222: _dl_start (in /lib/ld-2.12.90.so) 
==15469== by 0x53B876: ??? (in /lib/ld-2.12.90.so) 
==15469== 
==15469== ERROR SUMMARY: 13 errors from 8 contexts (suppressed: 0 from 0) 
을 보여줍니다에 따라 달라집니다

나는이 오류가 왜 나는지 모릅니다.

무엇을 의미합니까?

어떻게 제거 할 수 있습니까?

내 프로그램에 어떤 피해를 줄 수 있습니까?

답변

4

이것은 코드에서 가져온 것이 아니며 동적 라이브러리 로더 인 /lib/ld-*.so에서 가져온 것입니다.

이것은 널리 퍼지는 코드 조각으로 명백한 버그가 있다고 상상할 수 없으므로 valgrind가 잘못된 긍정을 부여한다고 생각합니다. 당신은 아마 그들을 무시할 수 있습니다.

+0

이 오류는 내 자신의 코드에서 비롯된 것입니다. 그러면 내 코드에 해를 끼칠 것입니까? –

+1

예, 버그의 징후 일 수 있습니다. 예를 들어, 다음과 같이 트리거합니다 :'int i; if (i) printf ("Hello world \ n");'. 그것은'i'가 초기화되지 않았기 때문에 정의되지 않은 동작입니다. – Thomas

0

이 코드는 시스템 라이브러리에서 가져오고 코드와 아무런 관련이 없으며 (해가없는 것처럼 보입니다.) /usr/lib/valgrind 디렉토리에 올바른 .supp 파일이 있는지 확인하십시오.

#-------- glibc 2.3.4/ Fedora Core 3 
{ 
    dl_relocate_object 
    Memcheck:Cond 
    fun:_dl_relocate_object 
} 

어쩌면 당신은 당신의 Valgrind의의 설치를 확인하려면 : 당신의 glibc 버전에 해당하는 같은 오류 메시지를 억제하는 부분이있을 것입니다.

관련 문제