我正在尝试制作一个使用二维数组转置(2×2)矩阵的程序。但是除了运行时故障之外我在向索引[0] [1]输入整数值时遇到问题,就像[1] [0]的值进入索引[0] [1]以及[1] [0]。 [0] [0]和[1] [1]的值与执行期间询问时由cin关键字输入的值相同。我也似乎没有收到任何令我担心的编译错误。就像我甚至添加了stdio标题一样,以防万一可能有所帮助或任何事情。
#include "iostream"
#include "stdio.h"
#include "conio.h"
using namespace std;
class transpose
{
public:
int m[1][1], te;
void input();
void process();
void output();
};
void transpose::input()
{
cout << "Matrix format:"<< endl << "[a b]" << endl << "[c d]" << endl;
cout << "Enter a: ";
cin >> m[0][0];
cout << "Enter b: ";
cin >> m[0][1];
cout << "Enter c: ";
cin >> m[1][0];
cout << "Enter d: ";
cin >> m[1][1];
cout << "Entered matrix:" << endl << "[" << m[0][0] << " " << m[0][1] << "]" << endl;
cout << "[" << m[1][0] << " " << m[1][1]<<"]" << endl;
}
void transpose::process()
{
te = m[0][1];
m[0][1] = m[1][0];
m[1][0] = te;
}
void transpose::output()
{
cout << "Transposed matrix:" << endl << "[" << m[0][0] << " " << m[0][1] << "]" << endl;
cout << "[" << m[1][0] << " " << m[1][1] << "]";
}
void main()
{
class transpose t;
t.input();
t.process();
t.output();
_getch();
}
我在执行期间(在VS 2013的调试模式下)获得的输出是:http://screencloud.net/v/gbQP
我已经尝试过搜索以前的堆栈变量损坏示例,但找不到删除错误的方法。
答案 0 :(得分:0)
你的矩阵是1比1,但你正在使用它,好像它是2乘2:
m[0][1]; // only valid index is 0
这个越界访问是未定义的行为。你需要解决这个问题。