Сумма матриц с перегруженным оператором

У меня сложение матриц с перегруженым оператором.
Ошибка - Вызвано исключение по адресу 0x00777095 в ТСПП 6.exe: 0xC0000005: нарушение прав доступа при записи по адресу в строчке
suma.mtrx[i][j] = mtrx[i][j] + y.mtrx[i][j];

#include <iostream>
#include <ctime>
#include <windows.h>
using namespace std;

class Matrix
{
private:
    int a, b;
public:

    int** mtrx = new int* [a];

    Matrix() :Matrix(2, 2) {}
    Matrix(int a, int b)
    {
        this->a = a;
        this->b = b;
    }
    void masik()
    {
        srand(time(NULL));

        for (int i = 0; i < a; i++)
        {
            mtrx[i] = new int[b];
            for (int j = 0; j < b; j++)
            {
                mtrx[i][j] = rand() % 9;
            }
        }
    }

    Matrix operator+(Matrix y) {
        Matrix suma;
        for (int i = 0; i < a; i++) {
            for (int j = 0; j < b; j++) {
                suma.mtrx[i][j] = mtrx[i][j] + y.mtrx[i][j];
            }
        }
        return suma;

    }

    void show()
    {
        for (int i = 0; i < a; i++)
        {
            for (int j = 0; j < b; j++)
            {
                cout << "|" << mtrx[i][j] << "|";
            }
            cout << "\n";
        }
    }
    ~Matrix() {
        delete[] mtrx;
    }

};

int main()
{
    Matrix oop(2, 2), oop1(2, 2);
    Matrix oop3;
    oop.masik();
    oop1.masik();
    oop.show();
    oop1.show();
    oop3 = oop + oop1;
    oop3.show();
}

Ответы (1 шт):

Автор решения: Mikhailo
int** mtrx = new int* [a];

В этот момент значение a не определено.

Лучше уж

Matrix(int a, int b):a(a),b(b)
{
    mtrx = new int* [a];
}

Только это не избавит от проблемы, потому что надо еще инициализировать ваш массив указателей — при обращении к mtrx[i][j] буде обращение к произвольным местам в памяти. Надо еще

for(int i = 0; i < a; ++i) mtrx[i] = new int[b];

И потом в деструкторе правильно память освободить.

→ Ссылка