2011-10-17 34 views
4

看到我有一個程序Valgrind的錯誤:條件跳轉或移動依賴於未初始化的值(一個或多個)

#include <stdio.h> 

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

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

當我與-g選項&使用來看,它編譯它的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

這是什麼意思這個錯誤soppose它來自馬自己的代碼?那麼它會傷害我的代碼? –

+1

是的,那麼它可能是一個錯誤的跡象。例如,這應該觸發它:'int i;如果(i)printf(「Hello world \ n」);'。這是未定義的行爲,因爲'我'還沒有被初始化。 – Thomas

0

儘管這是來自系統庫,並且與您的代碼無關(並且看起來無害),請確保在/usr/lib/valgrind目錄中有正確的.supp文件。對應你的glibc版本,就不會有這抑制了這種錯誤消息的部分:

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

也許你要檢查你的valgrind的安裝。

相關問題