저는 언어에 대한 이해를 돕기 위해 C++에서 고유 한 행렬 클래스를 구현하고 있습니다. 어딘가에 + + 연산자가 있으면 + 연산자에서 사용할 수 있다고 읽었습니다.C++ 연산자 + 및 연산자 + = 오버로드
template <class T>
const Matrix<T>& Matrix<T>::operator+(const Matrix<T> &R){
Matrix<T> copy(*this);
return copy += R;
}
을 그리고 여기에 + = 연산자 과부하입니다 : : 그래서 내가있어 무엇
template <class T>
const Matrix<T>& Matrix<T>::operator+=(const Matrix<T> & second_matrix){
//Learn how to throw errors....
if (rows != second_matrix.getNumRows() || cols != second_matrix.getNumCols()){throw "Dimension mismatch.";}
int i,j;
for (i = 0; i < rows; i++){
for (j = 0; j < cols; j++){
data[i][j] += second_matrix.get(i,j);
}
}
return *this;
}
내가 + = 예를 들면, + = B (잘 사용할 수 있습니다 반환하지 오류를). 그러나 + 연산자를 호출 (예를 들면, A = B + C를) 반환 I가 몇 년 동안 C++를 사용하고
template <class T>
Matrix<T>::~Matrix(){
for (int i = 1; i < rows; i++){
delete[] data[i]; }
delete[] data;
}
:
그냥 완성도를 위해, 여기 내 소멸자의test.cpp.out(77055) malloc: *** error for object 0x300000004: pointer being freed was not allocated
그리고 때로는 포인터를 계속 추적하는 데 어려움을 겪습니다. 나는 그것이 정상 이길 바래 ... 어떤 도움이 될 것입니다. 감사!
편집 : 여기 내 복사 생성자가 있습니다. 데이터 배열을 해제하도록 설정되었지만 제거되었습니다. 이제 세분화 오류가 발생합니다. 그 동작의 결과를 저장하는 새 (로컬 선언) 인스턴스로
template <class T>
Matrix<T>::Matrix(const Matrix<T>& second_matrix){
rows = second_matrix.getNumRows();
cols = second_matrix.getNumCols();
data = new T*[rows];
int i,j;
for (i = 0; i < rows; i++){
data[i] = new T[cols];
}
for (i = 0; i < rows; i++){
for (j = 0; j < cols; j++){
data[i][j] = second_matrix.get(i,j);
}
}
}
복사 생성자는 어떤 모양입니까? 그 오류는 메모리가 두 번 해제되었음을 나타 내기 때문에 문제 일 가능성이 높습니다. –
@Walt W : 네, 이것이 Big Three 문제라고 생각합니다. –
@Fred : 큰 세 가지 문제가 무엇인가요? – jakev