초기화 그리고 delete...
2006/10/24 14:00

다른 동료가 코딩한 프로그램에 코드 몇줄 추가하고 실행했더니...
CodeProject에 있는 소스코드란다...
이상하게 자꾸 메모리쪽에 ASSERT 에러가 발생하길래...(전혀 메모리쪽은 건들지도 않았는데...)
Debugging을 해봤더니...
이런 경우도...

  1. class CBabo
  2. {
  3. public:
  4.   CBabo();
  5.   CBabo(int i);
  6.   ~CBabo();
  7. private:
  8.   char*    m_babo;
  9. }
  10. CBabo::CBabo()
  11. {
  12.   m_babo= NULL;
  13. }
  14. CBabo::CBabo(int i)
  15. {
  16.   if(i==1)
  17.        some_function(); // m_babo에게 new pointer 할당...
  18.   else
  19.        m_babo= NULL;
  20. }
  21. CBabo::~CBabo()
  22. {
  23.   if (m_babo != NULL)
  24.   {
  25.        delete m_babo;
  26.       m_babo= NULL;
  27.   }
  28. }

some_function()에서 당연히 멤버변수 m_babo가 new 로 point를 할당하는데...
어쩌다 할당하지 못하는 경우가 드물게 발생...
그럴경우 m_babo는 초기화 되지 못하고 쓰레기값이 들어가 있는 상태에서 소멸자에서 m_babo 는 NULL 이 아니므로 할당되지 못한 메모리를 delete 함으로 에러 발생...

가장 좋은 초기화 방법으로는...
CBabo::CBabo() : m_babo(NULL)
참고서적으로는 이펙티브 C++...

오전 반나절을 시간낭비 했지만...
초기화 우습게 볼게 못되는군...

2006/10/24 14:00 2006/10/24 14:00
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • TWEETY 2006/10/25 08:26  댓글주소  수정/삭제  댓글쓰기
    m_pVersionInfo = NULL;

    //<- 이것도 에러. ㅋㅋ
  • duck 2006/10/25 16:04  댓글주소  수정/삭제  댓글쓰기
    저는 프로그램은 모르지만..

    babo... 만 눈에 들어와요~ ㅋㅋㅋ
  • duck 2006/10/26 00:10  댓글주소  수정/삭제  댓글쓰기
    ㅡㅡ;;