Сумма матриц с перегруженным оператором
У меня сложение матриц с перегруженым оператором.
Ошибка - Вызвано исключение по адресу 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];
И потом в деструкторе правильно память освободить.