C溢出还是什么?

时间:2017-06-14 03:29:10

标签: c overflow

我正在读取两个数字数组及其长度,并试图找到每个数组的总和。

我认为一个是正确的,但对于其他部分,我不知道发生了什么?有人可以看看它并帮助我吗?

int m, n, snum, i, smun;
scanf("%d",&m);
int num[m];
for (i=0;i<m;i++) {
    scanf("%d",&num[i]);
    snum+=num[i];
}
scanf("%d",&n);
int mun[n];
for (i=0;i<n;i++) {
    scanf("%d",&mun[i]);
    smun+=mun[i];
}
printf("%d %d ",smun,snum);

对于此代码,我可以有效地获取 smun ,但 snum 总是错误的? 即

for input:

 5
-2 -1 0 1 2
6
-3 -2 -1 1 2 3
my out put is: 0 -291502240

3 个答案:

答案 0 :(得分:5)

您需要将sum变量初始化为某个值。

int m,n,snum,i,smun; 
snum=0;
smun=0;
scanf("%d",&m); 
int num[m]; 
for (i=0;i<m;i++){ 
     scanf("%d",&num[i]); 
     snum+=num[i]; 
} 
scanf("%d",&n); 
int mun[n]; 
for (i=0;i<n;i++) {
scanf("%d",&mun[i]);
smun+=mun[i];
} 
printf("%d %d ",smun,snum);

当为变量分配地址时,它会获取该特定地址的数据,我们将其视为垃圾或垃圾值。第一个输出是正确的,因为你很幸运,地址中的值也是零。

答案 1 :(得分:2)

因为你做了很多未定义的行为

int m,n,snum,i,smun;

然后累积到 snum ,其中未初始化

snum+=num[i];

做类似

的事情
int m = 0;
int n = 0;
int snum = 0;
int i = 0;
int smun= 0;

将提供正确的初始化和结果

答案 2 :(得分:2)

你没有初始化snum和smun,它应该先snum = 0; smun = 0;然后操纵总和。