数组中的值被改变但他们不应该

Values in array getting altered yet they shouldn't

这是一个程序,要求用户输入两个 3 x 3 矩阵的值,然后求出两个矩阵的总和,并打印出与相加矩阵相同的值,但由于某种原因,在输入两个矩阵的值后矩阵中的 a 值被改变然后它影响总和但有时它不会

#include<stdio.h>
void main(){
    int matrix1[2][2];
    int matrix2[2][2];
    int sumMatrix[2][2];
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("Matrix[%d][%d]\n", i, j);
            printf("Enter matrix one's values> ");
            scanf("%d", &matrix1[i][j]);
        }
    printf("\n");
    }
     for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("Matrix[%d][%d]\n", i, j);
            printf("Enter matrix two's values> ");
            scanf("%d", &matrix2[i][j]);
        }
    printf("\n");
     }
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
        sumMatrix[i][j] = matrix1[i][j] + matrix2[i][j];
            
        }
    }
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("%d ", matrix1[i][j]);
        }
        printf("\n");}
        printf("\n");
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("%d ", matrix2[i][j]);
        }
        printf("\n");}
        printf("\n");

    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("%d ", sumMatrix[i][j]);
        }
        printf("\n");

}

}

您正在声明大小为 2x2 的矩阵并像访问 3x3 一样访问它们。更准确地说是缓冲区溢出,你在不该写的地方写了,这样你就覆盖了其他变量。

好吧,很明显我是个白痴。我认为数组大小是根据它们将拥有的索引数设置的,所以应该是 int matrix [3][3]

而不是 int matrix1[2][2]

小伙子,那就是数组溢出。 int matrix1[2][2]; 但是在循环中,你可能会得到矩阵 1[2][1],矩阵 1[2][2].