Ciao a tutti. Ho un'errore di allocazione in una classe che sto creando, che rappresenta delle matrici.
Questa é l'istruzione che da problemi:
codice:
cout << m1 + m4 + m4 + m4 << endl;
Viene quindi chiamata la funzione operator+:
codice:
template <typename T>
Matrix<T> Matrix<T>::operator+(const Matrix<T>& m) const
{
if( (row != m.row) or (col != m.col) )
{
throw std::range_error("");
}
Matrix<T> tmp(*this);
for(int i(0); i < row; i++)
{
for(int j(0); j < col; j++)
{
tmp.data[i][j] += m.data[i][j];
}
}
return std::move(tmp);
}
Penso che l'operatore sia giusto e che quindi l'errore si trovi nell'invocazione del costruttore di copia:
codice:
template <typename T>
Matrix<T>::Matrix(const Matrix<T>& m)
{
copy(m);
}
E quindi nella funzione copy:
codice:
template <typename T>
void Matrix<T>::copy(const Matrix<T>& m)
{
row = m.row;
col = m.col;
cancel();
data = new T*[row];
for(int i(0); i < row; i++)
{
data[i] = new T[col];
}
for(int i(0); i < row; i++)
{
for(int j(0); j < col; j++)
{
data[i][j] = m.data[i][j];
}
}
}
template <typename T>
void Matrix<T>::cancel()
{
for(int i(0); i < row; i++)
{
delete data[i];
}
delete data;
data = nullptr;
}
Grazie,
R.
Ps: Ho già aperto una discussione riguardante quella classe ma trovo più corretto (soprattutto per chi utilizza il tasto "cerca") aprire una nuova discussione per questo errore specifico...