我的2d数组的两个地方似乎得到相同的值

时间:2018-02-02 21:48:05

标签: c++ arrays

我使用Cygwin在NetBeans 8.2上运行它。

#include <iostream>
#include <cstdlib>

using namespace std;

int main() {
/*****************************************************************************/   

    int i,j=0;
    int a;

    int Mtrz1[1][2] = {0};
    int Mtrz2[1][2] = {0};
    int MtrzR[1][2] = {0};
    int MtrzA[1][2] = {0};

/******************************************************************************/   

    for (i=0 ; i<2 ; ++i){
        for (j=0 ; j<3 ; ++j){
            Mtrz1[i][j]=(rand() % 10);
        }
    }

    for (i=0 ; i<2 ; ++i){
        for (j=0 ; j<3 ; ++j){
            cout << Mtrz1[i][j] << " ";
            fflush;
        }
        cout << " " << endl;
    }

    cout << " " << endl;

    /* Here, for some kind of reason [0][2] and [1][0] of 
    MtrxB seem to be getting the same value */ 

    for (i=0 ; i<2 ; ++i){
        for (j=0 ; j<3 ; ++j){
            Mtrz2[i][j]=((j*3)+(9*i)+10);
            /* The formula here is because it did not read the value of any
               variable I passed to it */ 
        }
    }

    for (i=0 ; i<2 ; ++i){
        for (j=0 ; j<3 ; ++j){
            cout << Mtrz2[i][j] << " ";
            fflush;
        }
        cout << " " << endl;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:3)

数组声明中的维度指定元素的数量,而不是最后一个元素的索引。

在:

int Mtrz1[1][2] = {0};

你声明一个1×2阵列。在:

for (i=0 ; i<2 ; ++i){
    for (j=0 ; j<3 ; ++j){
        Mtrz1[i][j]=(rand() % 10);
    }
}

您将元素填充为2×3数组。这导致写入错误的位置,通常具有不可预测的行为,但显然在您的情况下,写入阵列中的其他位置,并可能写入您的过程中的其他数据。

更改声明以指定尺寸:

int Mtrz1[2][3] = {0};

答案 1 :(得分:0)

您的数组大小表示您的第一个维度中有一个元素,而第二个维度中有两个元素。您正在编写超出范围的值。