• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

소멸자에서 Exception Error가 발생하는데 원인을 잘 모르겠습니다.

23.08.15 15:20 작성 조회수 216

1

안녕하세요, 9.12 이니셜라이저 리스트 강의 수강중에 동일한 코드 빌드시 그림과 같이 소멸자에서 에러가 납니다. 원인이 무엇인지, 제가 어떤 부분에 대한 이해가 부족한 것인지 짚어주시면 감사하겠습니다.캡처_2023_08_15_15_17_47_229.png

답변 2

·

답변을 작성해보세요.

1

Soobak님의 프로필

Soobak

2023.08.16

안녕하세요, 답변 도우미 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 에러가 발생하는 것입니다.
image

1

NE님의 프로필

NE

2023.08.15

정확하게는 사진에서 잘린 main문을 확인해봐야 할 것 같습니다만...
의심되는 부분은 operator << 연산자를 재정의하실 때,
두번째 매개변수 타입으로 IntArray&가 아닌 IntArray로 타입을 지정하시면서 문제가 발생한 것 같습니다.

IntArray&가 아닌 IntArray로 매개변수 타입을 설정하시게 되면
인자 전달 과정에서 생성자가 호출되어 얕은 복사가 발생하고
operator << 연산자 호출이 끝나는 시점에 소멸자가 호출되게 됩니다.