c - C 中的数组和显示不同的输出

标签 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 抱歉,如果这个问题太基础了。

最佳答案

您正在尝试访问此处数组之外的值:

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 .数组的最后一个可访问索引是5,因此失败。

arr[5]: [ 0| 0|-1|-2|-4| 0]123545634234234

通过访问arr[0][6],您将进入数组之外并仅读取随机内存,这将导致未定义的行为。在这种情况下,未定义的行为表现为随机结果。

这同样适用于添加到 tmpSum 的其他两次尝试。

关于c - C 中的数组和显示不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37629702/

相关文章:

c++ - 订单统计实现

c - 字符串数组 C 的段错误

php - 如何在PHP中按最大相同值对数组进行排序

php - 在php中更改数组的索引

c - C语言K&R中的atoi函数

c - unsigned long long int pow

c - 函数 "fread"导致段错误

c# - 在 C# 中比较数组

arrays - Swift:创建一个具有不同对象实例默认值的数组

javascript - 同时修改多个数组元素javascript