Ciao a tutti. Ho un'errore di allocazione in una classe che sto creando, che rappresenta delle matrici.
Questa é l'istruzione che da problemi:
Viene quindi chiamata la funzione operator+:codice:cout << m1 + m4 + m4 + m4 << endl;
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<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); }
E quindi nella funzione copy:codice:template <typename T> Matrix<T>::Matrix(const Matrix<T>& m) { copy(m); }
Grazie,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; }
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...

Rispondi quotando
