从我的二维数组设置和获取值时出错

时间:2015-03-14 06:13:29

标签: c++

当我在flag[1][2]中输入一个号码时,我会自动将相同的号码放在flag[2][0]中。

为什么?

#include <iostream>
using namespace std;

void inicializarFlag(void);
void imrpimeflag(void);

int flag[2][2];

int main(){

    int i, j, escolha;

    inicializarFlag();
    cout<<"digite as posicoes e o valor: "<<endl;

    cin>>i;
    cin>>j;
    cin>>escolha;

    flag[i][j] = escolha;
    imrpimeflag();

    return 0;
}

void inicializarFlag(void){

    for (int i=0; i<=2; i++){
        for(int j=0; j<=2; j++){
            flag[i][j] = 0;
        }
    }
}

void imrpimeflag(void){

    for (int i=0; i<=2; i++){
        for(int j=0; j<=2; j++){
            cout<<"["<<i<<"]["<<j<<"]: "<<flag[i][j]<<endl;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

初始化数组int flag[2][2]时,您正在初始化2x2数组,而不是3x3数组。由于数组是零索引的,flag[2][0]将一个int放在2x2标志数组的第三行的第0列中,该列超出范围。将元素放置在数组边界之外的行为是未定义的,并且可能导致您描述的问题。

声明int flag[3][3],代码应该有效。