未初始化的值由堆栈分配创建

==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和谷歌搜索,但我找不到解决方案。

编辑: 这是完整代码的链接。

你检查过argcargv[1]的内容吗? argv[1]保证为非NULL以便适合作为atoi输入? 由于argv[1]是非数字的, atoi可能会返回表示未初始化值的陷阱表示吗?

编辑 :看到完整的代码后,我意识到这不是问题,你的诊断是不正确的。 你的问题在这里: for (i = 0; i <= count; i++) { sum += numbers[i]; }i == countnumbers[i]未初始化。 这是因为在最后一次分配到前一循环中的numbers[count] = i; count++;之后,count会递增: numbers[count] = i; count++; numbers[count] = i; count++; 。 因此,打印总和会产生您的消息,因为总和本身取决于未初始化的值。 也许你的意思for (i = 0; i < count; i++) { sum += numbers[i]; } for (i = 0; i < count; i++) { sum += numbers[i]; }