问题描述
int exercise1c (void){
int arr[] = {12,7,-3,4,1};
int *numb = arr;
int i;
int sum;
while (i<5){
sum += *(arr + i);
i++;
}
printf("%d",sum);
return 0;
}
但是,我注意到int *numb = arr;
行并未真正在任何地方使用。因此,我尝试删除它,这导致了一个非常奇怪的随机数(例如15775252)。谁能向我解释为什么删除该行会导致此问题?
解决方法
您使用不确定的未初始化非静态局部变量int sum;
的值来调用未定义行为。
然后,似乎删除该行会以某种方式影响编译器的优化过程。
初始化变量(例如int sum = 0;
)可以避免此问题。