new로 배열을 할당하였는데 배열의 마지막값이 입력이안됩니다.
조회수 492회
#include <iostream>
using namespace std ;
class Matrix {
int** values;
int row, column;
public: Matrix(int row = 0, int column = 0) { this->row = row; this->column = column ; }
Matrix operator + (const Matrix &c) { return Matrix(row + c.row, column + c.column) ; }
Matrix operator * (const double val) { return Matrix(row * val, column * val) ; }
friend ostream& operator << (ostream& os, const Matrix& c) ;
friend istream& operator >> (istream& os, Matrix& c) ;
} ;
ostream& operator << (ostream& os, const Matrix& c) {
for(int i = 0; i < c.row; i++){
for(int j = 0; j < c.column; j++){
os << **(c.values) << '\t';
}
os << endl;
}
return os ;
}
istream& operator >> (istream& is, Matrix& c) {
int** value = NULL;
value = new int*[c.row];
for(int i = 0; i < c.row; i++){
*(value) = new int[c.column];
}
for(int i = 0; i < c.row; i++){
for(int j = 0; j < c.column; j++){
cin >> value[i][j];
}
}
c.values = value;
}//////////도와주세요 ㅠ ㅠ
int main() {
Matrix m1(2, 2), m2(2, 2) ;
cin >> m1 ;
cin >> m2 ;
Matrix m3 = m1 + m2 ;
Matrix m4 = m3 * 10 ;
cout << m3 << endl ;
cout << m4 << endl ;
}
컴파일은 잘 됩니다만... value[i][j] 부분에 cout을 넣어서 확인해 봤는데 1.1, 1.2, 2.1 까지는 잘 cin이 되는데 2.2 부분에서 갑자기 멈춰버리네요. 원인이 뭘까요? new를 잘 못 넣어준건가요?
1 답변
-
for(int i = 0; i < c.row; i++){ *(value) = new int[c.column]; }
위 부분에서
i
에 따라value+0
,value+1
에 각각 접근할 수 있어야 할 것 같네요.지금은
value+0
에 동적할당한 일차원 배열이 두번 저장되어, 첫번째 저장한 일차원배열은 메모리 누수됩니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력