我正在尝试创建一个简单的程序,用户输入矩阵的每个值,然后程序打印矩阵。到目前为止我已经
了#include <iostream>
using namespace std;
int main()
{
int n;
cout << "A is an nxn matrix.\nn=";
cin >> n;
int matrix[n-1][n-1];
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
cout << "A[" << i+1 << "][" << j+1 << "]=";
cin >> matrix[i][j];
}
}
cout << "[[ ";
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
cout << matrix[i][j] << " ";
}
if (i!=n-1) //Just to make the output pretty
cout << "]\n [ ";
else
cout << "]]";
}
}
`
然而,每当我输入任何大小的矩阵,例如[[1,2,3] [4,5,6] [7,8,9]]时,程序返回[[1,2, 4] [4,5,7] [7,8,9]]。
有谁能告诉我为什么会这样,以及如何解决它?
答案 0 :(得分:2)
当matrix[i][j]
的i {j等于n-1
声明为matrix
matrix[n-1][n-1]
范围内的访问范围超出了范围
使用:
int matrix[n][n]; // will say 0 to n-1
而不是
int matrix[n-1][n-1];
答案 1 :(得分:0)
应为int matrix[n][n]
。通常,数组A[n]
具有从0到n-1的索引。
您正在溢出行的边界,例如,如果您有int matrix[2][2]
并设置matrix[0][2] = 42
,那么您实际上正在分配matrix[1][0]
,并且当您设置matrix[2][0]
时你正在编写超出数组边界的内容,可能会破坏其他一些变量甚至调用堆栈,这可能会导致未定义的行为。