2013-02-24 116 views
2
==13890== Conditional jump or move depends on uninitialised value(s) 
==13890== at 0x4E7E4F1: vfprintf (vfprintf.c:1629) 
==13890== by 0x4E878D8: printf (printf.c:35) 
==13890== by 0x400729: main (001.c:30) 
==13890== Uninitialised value was created by a stack allocation 
==13890== at 0x400617: main (001.c:11) 

線創建被引用:未初始化值由堆棧分配

int limit = atoi(argv[1]); 

我不知道如何解決它。我試圖在stackoverflow和谷歌搜索,但我找不到解決方案。

編輯:This是鏈接到完整的代碼。

+1

顯示更多的代碼。 Problem.is幾乎肯定是在別的地方。 – hyde 2013-02-24 06:18:43

+1

第30行是'return 0;',並且沒有理由讓該行有與printf相關的任何內容。我感覺這個valgrind輸出與代碼不同步。 – Sebivor 2013-02-24 06:59:13

+0

@Bart根據Bart的答案和OP對它的評論來判斷,你在問題中編輯了* fixed *代碼;代碼不再顯示問題。這沒有幫助。 – 2016-01-16 01:37:24

回答

10

你檢查了argcargv[1]的內容嗎?是argv[1]保證是非NULL爲了適合作爲輸入atoi?由於argv[1]是非數字,atoi可能是否可能返回代表未初始化值的陷阱表示形式?

編輯:看到完整的代碼後,我意識到這不是問題,並且您的診斷不正確。您的問題在這裏:for (i = 0; i <= count; i++) { sum += numbers[i]; }i == count,numbers[i]未初始化。這是因爲在上次循環中最後一次分配到numbers[count]之後,計數會遞增:numbers[count] = i; count++;。因此,打印總和會導致您的消息,因爲總和本身取決於未初始化的值。也許你的意思for (i = 0; i < count; i++) { sum += numbers[i]; }

+0

我傳遞的是「10」,如下所示:'./001 10'。此外,該程序工作,但我只想知道爲什麼我得到這個錯誤。我將在鏈接中編輯完整的代碼。 – 2013-02-24 06:33:47

+0

這個修好了!謝謝您的幫助! – 2013-02-24 07:30:46