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 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    for(int i = 0; i < c.row; i++){
        *(value) = new int[c.column];
    }
    

    위 부분에서 i 에 따라 value+0, value+1에 각각 접근할 수 있어야 할 것 같네요.

    지금은 value+0에 동적할당한 일차원 배열이 두번 저장되어, 첫번째 저장한 일차원배열은 메모리 누수됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)