2011-05-30 54 views
-1

我有一個程序在工作幾天後崩潰,所以我決定使用Valgrind運行它。我已經清除了所有的警告,但是這一個:有條件跳轉或移動取決於指向第一行代碼的未初始化值

==30522== Conditional jump or move depends on uninitialised value(s) 
==30522== at 0x405E32: main (main.c:548) 
==30522== Uninitialised value was created by a stack allocation 
==30522== at 0x405652: main (main.c:80) 

main.c:80是程序的第一行:

int main(int argc, char *argv[]) 
{ // <- this is the line 80 

我想我已經打掃乾淨了所有的錯誤,但它仍然讓我發瘋。這是怎麼回事?

    listado_ips->ocr=(float)listado_ips->ocr/tiempo_milisecs; // <-line 548 

在此之前幾行:

milisecs1=milisecs1-milisecs2 
tiempo_milisecs=(float)milisecs1/1000; 

milisecs1被初始化。

回答

4

的問題是,在一種以main()開始創建的變量列表中,至少有一個,當你因爲你還沒有顯示在線什麼的就行548

閱讀這仍然是未初始化548,也不在80和548之間,我們不能輕易告訴你更多。但專注於線548 - 不管線80


如果行548:

listado_ips->ocr=(float)listado_ips->ocr/tiempo_milisecs; 

然後分析其中 'tiempo_milisecs' 設置。如果這是乾淨的,那麼你需要看看​​的設置。我們可以合理安全地假定listado_ips本身(指針)被初始化。

+0

listado_ips-> ocr =(float)listado_ips-> ocr/tiempo_milisecs; 這是行548 – Freaktor 2011-05-30 17:09:15

+0

@Freaktor:這還不夠信息。警告消息告訴你某些東西沒有明確初始化。 – 2011-05-30 17:15:53

相關問題