运行时检查失败#2 - 堆栈变量已损坏

时间:2014-04-20 09:07:10

标签: c++ oop

我正在尝试制作一个使用二维数组转置(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

注意:在我按下一个字符以便程序完成执行后,就会出现运行时错误弹出窗口[即我按_getch()命令后按一个键。

我已经尝试过搜索以前的堆栈变量损坏示例,但找不到删除错误的方法。

1 个答案:

答案 0 :(得分:0)

你的矩阵是1比1,但你正在使用它,好像它是2乘2:

m[0][1]; // only valid index is 0

这个越界访问是未定义的行为。你需要解决这个问题。