C溢出还是什么?

C overflow or what is it?

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

一方面我说对了,但另一方面,我不明白发生了什么事?有人可以看看它并帮助我吗?

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

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

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;

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

你没有初始化snum和smun,应该先snum = 0; smun = 0;再操作sum。

您需要将 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);

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