未初始化的值由堆栈分配创建
==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和谷歌搜索,但我找不到解决方案。
编辑: 这是完整代码的链接。
你检查过argc
和argv[1]
的内容吗? argv[1]
保证为非NULL
以便适合作为atoi
输入? 由于argv[1]
是非数字的, atoi
可能会返回表示未初始化值的陷阱表示吗?
编辑 :看到完整的代码后,我意识到这不是问题,你的诊断是不正确的。 你的问题在这里: for (i = 0; i <= count; i++) { sum += numbers[i]; }
当i == count
, numbers[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]; }