작성
·
306
답변 2
1
안녕하세요, 답변 도우미 Soobak 입니다.
NE 님께서 잘 말씀해주신 것 처럼, Operator <<
의 구현부분 중 함수의 매개변수에 오타가 생기신 것 같습니다.
강의에서의 해당 부분의 코드는 다음과 같이 두 번째 매개변수의 자료형은 IntArray&
입니다.
friend ostream & operator << (ostream & out, IntArray & arr) {
for (unsigned i = 0; i < arr.m_length; ++i)
out << arr.m_data [i] << " ";
out << endl;
return out;
}
하지만, 질문자님의 코드에서는 두 번째 매개변수의 자료형이 IntArray
로 되어 있습니다.
따라서, NE 님께서 말씀해주신 것 처럼 얕은 복사로 인해 소멸자에서 double free
에러가 발생하는 것입니다.
1
정확하게는 사진에서 잘린 main문을 확인해봐야 할 것 같습니다만...
의심되는 부분은 operator << 연산자를 재정의하실 때,
두번째 매개변수 타입으로 IntArray&가 아닌 IntArray로 타입을 지정하시면서 문제가 발생한 것 같습니다.
IntArray&가 아닌 IntArray로 매개변수 타입을 설정하시게 되면
인자 전달 과정에서 생성자가 호출되어 얕은 복사가 발생하고
operator << 연산자 호출이 끝나는 시점에 소멸자가 호출되게 됩니다.