초기화 그리고 delete...
다른 동료가 코딩한 프로그램에 코드 몇줄 추가하고 실행했더니...
CodeProject에 있는 소스코드란다...
이상하게 자꾸 메모리쪽에 ASSERT 에러가 발생하길래...(전혀 메모리쪽은 건들지도 않았는데...)
Debugging을 해봤더니...
이런 경우도...
- class CBabo
- {
- public:
- CBabo();
- CBabo(int i);
- ~CBabo();
- private:
- char* m_babo;
- }
- CBabo::CBabo()
- {
- m_babo= NULL;
- }
- CBabo::CBabo(int i)
- {
- if(i==1)
- some_function(); // m_babo에게 new pointer 할당...
- else
- m_babo= NULL;
- }
- CBabo::~CBabo()
- {
- if (m_babo != NULL)
- {
- delete m_babo;
- m_babo= NULL;
- }
- }
some_function()에서 당연히 멤버변수 m_babo가 new 로 point를 할당하는데...
어쩌다 할당하지 못하는 경우가 드물게 발생...
그럴경우 m_babo는 초기화 되지 못하고 쓰레기값이 들어가 있는 상태에서 소멸자에서 m_babo 는 NULL 이 아니므로 할당되지 못한 메모리를 delete 함으로 에러 발생...
가장 좋은 초기화 방법으로는...
CBabo::CBabo() : m_babo(NULL)
참고서적으로는 이펙티브 C++...
오전 반나절을 시간낭비 했지만...
초기화 우습게 볼게 못되는군...
m_pVersionInfo = NULL;
//<- 이것도 에러. ㅋㅋ
수정해서 니가 벌쭘하겠다만...
예리하셔...
저는 프로그램은 모르지만..
babo... 만 눈에 들어와요~ ㅋㅋㅋ
babo는 babo를 알아본다더니...
ㅡㅡ;;
^^a