矩阵 class 突然结束的 C++ 程序

C++ Program with matrix class ending abruptly

我正在写一个矩阵 class,我需要在主程序中执行一些矩阵计算。我不确定为什么当用户选择大小大于 2x2 的矩阵时程序突然结束。 std::cin 工作正常,直到两行,但程序在循环到达第三行后结束。下面只展示了与我的问题相关的部分代码。

#include<iostream>
#include <vector>
#include <cassert>
using std::vector;
using namespace std;

class Matrix {
private:
    int rows;
    int cols;
    int **vtr;

public:
    Matrix(int m = 2, int n = 2)
    {
        rows = m;
        cols = n;
        vtr = new int*[m];
        for (int i = 0; i < m; i++)
        {
                vtr[i] = new int [n];
        }

        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                vtr[i][j] = 0;
            }

        }
    }
void read()
    {
        cout << "Enter the number of rows and columns of Matrix separated by a space: ";
        cin >> rows >> cols;
        Matrix a(rows, cols);
        a.write();
        

        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                cout << "(" << i << "," << j << ") : ";
                cin >>vtr[i][j];
                
            }
        }
    }

    void write()
    {
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                cout <<  vtr[i][j] <<  " ";
                
            }
            cout << endl;
        }
        cout << endl << endl;
    }
};

int main()
{

    Matrix A, B, C;
    int row, column ;

    cout << "For Matrix A" << endl;
    A.read();
    cout << "For Matrix B " << endl;
    B.read();
    cout << "For Matrix C" << endl;
    C.read();
}

定义矩阵A、B、C时会构造三个矩阵,所以矩阵大小为2x2。当您调用函数 cin 为某些位置赋值时,不在 2x2 中将不起作用。

由于二维数组,vtr是在声明Matrix对象时创建的,您可以在读取控制台输入后移动vtr创建,如下所示。

Matrix(int m = 2, int n = 2)
{
    /*rows = m;
    cols = n;
    vtr = new int*[m];
    for (int i = 0; i < m; i++)
    {
        vtr[i] = new int [n];
    }

    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            vtr[i][j] = 0;
        }
    }*/
}

void read()
{
    cout << "Enter the number of rows and columns of Matrix separated by a space: ";
    cin >> rows >> cols;
        
    vtr = new int*[rows];
    for (int i = 0; i < rows; i++)
    {
        vtr[i] = new int [cols];
    }
        
    //Matrix a(rows, cols);
    //write();
        
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            cout << "(" << i << "," << j << ") : ";
            cin >>vtr[i][j];
        }
    }
        
    write(); //Prints the array
}