【发布时间】:2013-02-24 05:40:51
【问题描述】:
==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 和 google 上搜索,但找不到解决方案。
代码(来自修订历史):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
if (argc != 2) {
printf("You must pass a single integer\n");
exit(1);
}
int limit = atoi(argv[1]);
int numbers[limit / 2];
int count = 0;
int i;
for (i = 3; i < limit; i++) {
if (i % 3 == 0 || i % 5 == 0) {
numbers[count] = i;
count++;
}
}
int sum = 0;
for (i = 0; i < count; i++) {
sum += numbers[i];
}
printf("The sum is: %d\n", sum);
return 0;
}
【问题讨论】:
-
显示更多代码。问题。几乎可以肯定是在其他地方。
-
第 30 行是
return 0;,并且没有理由让该行包含任何与 printf 相关的内容。我感觉这个 valgrind 输出与代码不同步。 -
好像是@andrew。那时我一定错过了。不幸的是,原来的链接已经失效,所以我看不出有什么办法可以纠正这种情况。
-
很遗憾代码被编辑为外部链接,该链接已变得陈旧,因此与问题无关。尽管对我来说是声誉的来源(见下文),但我将投票关闭(也许稍后会删除)它,因为它不可能对其他人有用。
-
链接失效了,请提供导致问题的代码