Я перезаписал оператор +:
Matrix& Matrix::operator+(Matrix m1)
{
//This should never be triggered
if(this->data.capacity() != m1.data.capacity() || this->data[0].capacity() != m1.data[0].capacity())
{
cout << "Dimensions don't match, can't add.\n";
throw 7;
}
vector<vector<double>> result;
result.resize(m1.data.capacity());
for(int i = 0; i < m1.data.size(); i++)
{
result[i].resize(m1.data[0].size());
for(int j = 0; j < m1.data[0].size(); j++)
{
result[i][j] = m1.data[i][j] + this->data[i][j];
}
}
return Matrix(m1.getRows(),m1.getCols(), result);
}
Это соответствующий конструктор:
Matrix::Matrix(int rows, int cols, vector<vector<double>> data)
{
this->rows = rows;
this->cols = cols;
this->data = data;
}
Здесь исполняемый код:
c = (a+b);
Когда я назначаю точку останова на последней строке перегрузки оператора, я могу видеть правильные результаты в result
и оба столбца и строки назначаются правильно. Когда я выхожу, c
имеет "строки" и "cols", которые установлены правильно, но данные пустые. Почему это?
Ваш оператор + ошибочен. Он должен возвращать новый объект, а не ссылку на локальный объект (который в любом случае является UB).