C中的数组和表示不同的输出

时间:2016-06-04 11:31:55

标签: c arrays

我正在通过一些例子了解数组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 对不起,如果这个问题太基础了。

1 个答案:

答案 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]