我使用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;
}
答案 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)
您的数组大小表示您的第一个维度中有一个元素,而第二个维度中有两个元素。您正在编写超出范围的值。