我正在通过一些例子了解数组C.我有一个奇怪的情况,我的代码每次使用相同的输入产生不同的输出。
int main(){
int arr[6][6];
arr[0][0]=1;
arr[0][1]=1;
arr[0][2]=1;
arr[0][3]=0;
arr[0][4]=0;
arr[0][5]=0;
arr[1][0]=0;
arr[1][1]=1;
arr[1][2]=0;
arr[1][3]=0;
arr[1][4]=0;
arr[1][5]=0;
arr[2][0]=1;
arr[2][1]=1;
arr[2][2]=1;
arr[2][3]=0;
arr[2][4]=0;
arr[2][5]=0;
arr[3][0]=0;
arr[3][1]=9;
arr[3][2]=2;
arr[3][3]=-4;
arr[3][4]=-4;
arr[3][5]=0;
arr[4][0]=0;
arr[4][1]=0;
arr[4][2]=0;
arr[4][3]=-2;
arr[4][4]=0;
arr[4][5]=0;
arr[5][0]=0;
arr[5][1]=0;
arr[5][2]=-1;
arr[5][3]=-2;
arr[5][4]=-4;
arr[5][5]=0;
int tmpSum=0;
int sum=0;
for(int arr_i = 0; arr_i < 6; arr_i++){
for(int arr_j = 0; arr_j < 4; arr_j++){
if(arr[arr_i][arr_j]!=0 && arr[arr_i][arr_j+2]!=0){
tmpSum=0;
tmpSum+=arr[arr_i][arr_j]+arr[arr_i+1][arr_j]+arr[arr_i+2][arr_j];
tmpSum+=arr[arr_i+1][arr_j+1];
tmpSum+=arr[arr_i][arr_j+2]+arr[arr_i+1][arr_j+2]+arr[arr_i+2][arr_j+2];
if(tmpSum>sum){
sum=tmpSum;
}
}
}
}
printf("%d\n",sum);
return 0;
}
我的输出如下所示:
sh-4.3$ main
1596448349
sh-4.3$ main
1608309885
sh-4.3$ main
13
我的预期输出总是13 对不起,如果这个问题太基础了。
答案 0 :(得分:3)
您正在尝试访问数组外的值:
tmpSum+=arr[arr_i][arr_j]+arr[arr_i+1][arr_j]+arr[arr_i+2][arr_j];
当arr_i
为5(外部循环的最后一次迭代)时,arr_i+2
返回7,arr_i+1
返回6.数组的最后一个可访问索引为{{1} },所以这失败了。
5
通过访问arr[5]: [ 0| 0|-1|-2|-4| 0]123545634234234
,您将走出数组并只读取随机内存,这将导致未定义的行为。在这种情况下,未定义的行为表现为随机结果。
这同样适用于另外两次尝试添加到arr[0][6]
。