Written on
·
317
1
안녕하세요, 9.12 이니셜라이저 리스트 강의 수강중에 동일한 코드 빌드시 그림과 같이 소멸자에서 에러가 납니다. 원인이 무엇인지, 제가 어떤 부분에 대한 이해가 부족한 것인지 짚어주시면 감사하겠습니다.
Answer 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 << 연산자 호출이 끝나는 시점에 소멸자가 호출되게 됩니다.