모달리스 다이얼로그 와 메모리 리크(Leaks)

31367 
Created at 2006-12-27 00:46:09 
379   0   0   0  

Cdialog 즉 다이얼로그 창은. 간단하게 메시지를 주고 받을수 있는 가장 간단한 인터페이스부터
미디어 플레이어 같은 매우 복작합 인터페이스까지 쉽게 구현할수 있는 보편적인 인터페이스 입니다.
저두 처음에는 다이얼로그 모드에서 작업을 많이 했죠.
비교적 간단하고, 간편하게 짤수 있으니까요.
 
그러나 저러나, 다이얼로그는 모달과 모달리스가 있고,
모달 구현은 매우 간단합니다.
DoModal(), EndDialog(.);
딸랑 2가지만알면 화면에 띠울수 있죠.
그러나 모달의 경우 차일드로 생성이 될경우, 부모의 인터페이스 메커니즘을 방해하는 성향이 있기 때문에.
때로는 모달리스 다이얼로그 작성이 꼭 필요한 경우가 있죠.
 
중요한건 이 모달리스 다이얼로그를 모달같이 메모리 운영을하면 메모리 리크가 발생한다는 것이죠.

             if (m_pModeless == NULL)
             {
                           m_pModeless = new CAdderDialog(this);
                           //m_pModeless->DoModal();
                           if (m_pModeless->Create() == TRUE)
                                        GetDlgItem(IDOK)->EnableWindow(FALSE);
             }
             else
                           m_pModeless->SetActiveWindow();
 
위에서와 같이 new 연산자로 동적할당해서 쓰는 경우가 많기 때문입니다.
 
간단하게 Delete m_pModeless;를 하면 되지 않겠느냐 할수 있지만.
문제는 소멸자에게 있습니다.
소멸할때 메커니즘이 순수하게 Delete할때 소멸자만 호출이 되는 것이 아니죠..
CWnd의 자식 클레스들이 그렇습니다.(윈도우 헨들이 하나씩은 있죠.2개 가진건 아직 못봤어요ㅠ.ㅑ)
원어로(CleanUp phase)는 , 즉 소멸될 때 WM_NCDESTROY라는 메시지가 윈도우에 제일 마지막으로
전달되는 메시지 입니다.
그리고 이 메시지를 받는 CWnd 이하 클레스는 CWnd::OnNcDestroy으로 헨들링이 되는데.
역할은 C++ 객체에서 HWND포인터를 분리하고, Virtual Function , PostNcDestroy를 호출합니다.
 
중요한것은 여기서 (PostNcDestroy)에서 리소스 (메모리)해제 로직을 추가하면, 아무 문제 없이 처리할수 있다는것이죠..
 
void CAdderDialog::PostNcDestroy()
{
                  delete this;
                  CDialog::PostNcDestroy();
}
이렇게요..
 
그리고 중요한 것은 부모 윈도우는 자식 모달리스 윈도우가 정확히 언제 죽을지 모르니 이 부분을 해결해야 되는데.
여기서 부모는 자식을 강제로 Delete 시키지 않고. 걍 자식 너 스스로 죽어!! 라고 할수 있게 됩니다.
즉 부모에서는 반드시 Delete m_pModeless;를 하지 않고,
m_pModeless = NULL; 만 하구요. 메모리 해제는 자식 윈도우의 PostNcDestroy에게 위임하게 됩니다.
그러면 언제 죽을지 모르는 자식윈도우의 처리에 골머리를 쓰지 않아도 되구요.
이에 따른 메모리 리크 문제도 해결이 되지요..
참 소멸 할때는 DestroyWindow()를 반드시 호출해야 합니다.
모달리스는 다이얼로그가 아니라, 하나의 폼뷰(CformView)같이 뷰(CWnd drived class)이니까요..



Tags: leak memoryleak 메모리누수 윈도우즈 Share on Facebook Share on X

◀ PREVIOUS
MFC의 TRACE() 출력 빼먹는 현상
▶ NEXT
GetDC()의 메모리 누수 막기
  댓글 0
로그인을 하시면 댓글을 등록 할 수 있습니다.
SIMILAR POSTS

GetDC()의 메모리 누수 막기 (created at 2006-12-27)

MFC의 TRACE() 출력 빼먹는 현상 (created at 2006-12-27)

간단히 WIN32에서 MFC의 메모리 누수 체크하는 방법 (created at 2006-12-27)

VC++ 6.0 에서 GDI+ 사용하기.. (created at 2006-12-27)

GDI+를 이용한 회전 3가지.... (created at 2006-12-27)

MFC의 GDI/GDI+ 리소스 누수 현상 (created at 2006-12-27)

VC 에서 자동으로 빌드 넘버 증가하기 (created at 2006-12-28)

Internet Explorer가 자주 비정상 종료 할때 (created at 2006-12-29)

UTF-8로 파일 저장하기 (created at 2006-12-22)

버퍼 오버 플로우 공격과 DEP (created at 2007-01-24)

DEP 기능 비활성화 (created at 2007-01-24)

윈도우 버전 알아내는 함수 (created at 2007-01-25)

mdb 파일의 암호깨기 (created at 2007-01-25)

WinGate 깔았더니 블루스크린이 떠요 (created at 2007-01-25)

MSN Live Messenger가 동작이 안되요 (created at 2007-01-26)

네임드 커널 오브젝트를 사용한 중복 실행 방지법 (created at 2007-01-26)

태스크 바에서 프로그램(윈도우) 제목 숨기기 (created at 2007-01-26)

태스크 바를 없애버리고 싶다 (created at 2007-01-26)

버튼으로 해당 윈도우 종료하기 (created at 2007-01-26)

리스트박스 엔터처리 (created at 2007-01-26)

뷰의 배경색 바꾸기 (created at 2007-01-26)

대화상자에 비트맵 올리기 (created at 2007-01-26)

다이얼로그 리소스대로 폼뷰 크기 설정하기 (created at 2007-01-26)

CD, 플로피등의 디스크 삽입 자동 판단루틴 (created at 2007-01-26)

키보드로 마우스 커서 움직이기 (created at 2007-01-26)

파일 등록정보 보여주기 (created at 2007-01-26)

여러가지 시스템 종료 기법 (created at 2007-01-26)

작업관리자에서 윈도우 감추기 (created at 2007-01-26)

Windows95/98 암호 알아내기 (created at 2007-01-28)

마우스 커서 모양바꾸기 (created at 2007-01-28)

Internet Explorer의 검색창에서 한글 입력이 안될때 (created at 2006-11-24)

프린터 인쇄 취소가 안될때 (created at 2006-11-24)

spoolsv.exe의 문제 cpu점유률 100% (created at 2006-11-24)

Region을 이용한 부정형 윈도 만들기 (created at 2006-11-16)

델파이로 긁어오는 HTML 페이지 (created at 2007-02-06)

virtual와 override 문의 사용법에 대해서 (created at 2007-02-06)

훅 인스턴스의 생성과 해제 (created at 2007-02-06)

Apple iPod Remote Control Protocol (created at 2007-02-06)

대문자, 소문자 변환 함수 (created at 2007-02-14)

PC에서 동영상 삭제가 안될때. (created at 2007-02-14)

유동 IP로 DNS 매핑하여 서비스 하는 방법 (created at 2006-10-14)

MS IE7.0 가세「툴바 전쟁」혈투 예고 (created at 2006-10-14)

어떤 디렉토리가 가장 큰지 알아내는 방법? (created at 2006-10-13)

이미지를 지정된 비율로 자르기 (crop) (created at 2006-10-10)

모니터 끄는 API (created at 2006-09-29)

File Search Sample Code (created at 2006-09-29)

String Find 알고리즘 (created at 2006-09-29)

HTTP Downloading Reference Source Code (created at 2006-09-29)

Application Event써서 Keyboard 받아내기 (created at 2006-09-29)

Web Browser Control에서 Enter키 먹게 하기 (created at 2006-09-29)

OTHER POSTS IN THE SAME CATEGORY

버튼으로 해당 윈도우 종료하기 (created at 2007-01-26)

태스크 바를 없애버리고 싶다 (created at 2007-01-26)

태스크 바에서 프로그램(윈도우) 제목 숨기기 (created at 2007-01-26)

네임드 커널 오브젝트를 사용한 중복 실행 방지법 (created at 2007-01-26)

MSN Live Messenger가 동작이 안되요 (created at 2007-01-26)

설치형 블로그 VS 가입형 블로그 (created at 2007-01-26)

WinGate 깔았더니 블루스크린이 떠요 (created at 2007-01-25)

mdb 파일의 암호깨기 (created at 2007-01-25)

윈도우 버전 알아내는 함수 (created at 2007-01-25)

USB 장치 연결/연결해제 이벤트 처리하기 (created at 2007-01-25)

버퍼 오버 플로우 공격과 DEP (created at 2007-01-24)

Internet Explorer가 자주 비정상 종료 할때 (created at 2006-12-29)

VC 에서 자동으로 빌드 넘버 증가하기 (created at 2006-12-28)

네이버 검색엔진에 높은순위로 등록되는 방법 (created at 2006-12-27)

GetDC()의 메모리 누수 막기 (created at 2006-12-27)

MFC의 TRACE() 출력 빼먹는 현상 (created at 2006-12-27)

간단히 WIN32에서 MFC의 메모리 누수 체크하는 방법 (created at 2006-12-27)

VC++ 6.0 에서 GDI+ 사용하기.. (created at 2006-12-27)

GDI+를 이용한 회전 3가지.... (created at 2006-12-27)

MFC의 GDI/GDI+ 리소스 누수 현상 (created at 2006-12-27)

JSP 페이지 이동 4가지 방법 및 특성 (created at 2006-12-26)

기념일계산,날짜계산해서....^^; 앤에게 사랑받으시길..... (created at 2006-12-22)

자바스크립트로 만든 빙고 게임 (created at 2006-12-22)

현재달의 첫째날 , 마지막날 (날짜,일자) 구하기 (created at 2006-12-22)

JPG 저장된 DB 이미지 JSP로 보여주기 (created at 2006-12-22)

스크립트 디버거 (created at 2006-12-22)

수많은 체크박스 중 몇개 체크했는지 확인 (created at 2006-12-22)

가상디스크 만들기 (created at 2006-12-22)

RSS 수집당하는 법 (created at 2006-12-22)

프린팅 하기(IE 전용) (created at 2006-12-22)

UPDATES

자리 마음에 안든다고 6급 공무원 패는 농협 조합장 (created at 2024-03-26)

85세 딸 짜장면 사주는 102세 어머니 (created at 2024-03-26)

1990년대 감각파 도둑 (created at 2024-03-26)

치매에 걸린 69살의 브루스 윌리스가 전부인 데미무어를 보고 한 말 (updated at 2024-03-22)

일제강점기가 더 살기 좋았을지도 모른다는 조수연 국민의힘 후보 - 친일파? (updated at 2024-03-14)

성일종 인재육성 강조하며 이토 히로부미 언급 - 인재 키운 선례? (updated at 2024-03-13)

경제는 대통령이 살리는 것이 아닙니다 라던 윤석열대통령 - 상황 안좋아지자 여러 전략을 펼쳤지만, 부작용 속출했던 2024년의 봄 (updated at 2024-03-13)

극빈의 생활을 하고 배운것이 없는 사람은 자유가 뭔지도 모를 뿐 아니라 왜 개인에게 필요한지에 대한 필요성을 못느낀다는 윤석열 대통령 (updated at 2024-03-08)

조선일보를 안본다는 사람들이 말하는 그 이유 - 천황폐하, 전두환 각하, 김일성 장군 만세? (created at 2024-03-07)

광폭타이어를 장착하면 성능이 좋아질거라는 착각 (updated at 2024-03-03)

면허시험장에서 면허갱신하면 하루만에 끝나나? (updated at 2024-03-03)

신한은행/신한투자증권 금융거래 종합보고서 다운로드 방법 (updated at 2024-02-26)

100년 된 일본 장난감 회사가 내놓은 변신 기술에 난리난 과학계 (created at 2024-02-26)

알리에서 발견한 한글 지원하는 가성비 쩌는 무선 기계식키보드 (updated at 2024-02-25)

쌍팔년도가 1988년인줄 알았던 1인 (updated at 2024-02-23)

이쁜 색으로 변신한 테슬라 사이버트럭 (created at 2024-02-23)

2024년 카타르 아시안컵 4강전 전날 한국 대표팀 내부에 있었던 이강인의 폭주 (updated at 2024-02-21)

강릉 맛집 지도 (updated at 2024-02-20)

간이 안좋을 때 나타나는 증상 20가지 (updated at 2024-02-20)

배설물을 이용하여 일본에 저항했던 독립운동가 조명하 (updated at 2024-02-20)

요건 몰랐지롱? 이순신을 사랑한 외국인 (created at 2024-02-20)

원빈도 머리빨 (created at 2024-02-19)

대표적인 대한민국의 미남배우 중 하나인 원빈 (created at 2024-02-19)

백제의 건국 시조 온조왕 (updated at 2024-02-19)

700년동안 대한민국 고대국가의 한축이었던 백제시대 (created at 2024-02-19)

대머리들에게 주는 대머리의 조언 (created at 2024-02-17)

일본의 여성 락그룹 프린세스 프린세스의 "다이아몬드" (created at 2024-02-17)

결혼식 직전 연락두절된 신랑 (created at 2024-02-17)

대한민국 축구팀 파문으로 인해 중국 소셜미디어까지 등장한 탁구 전도사 이강인 (updated at 2024-02-16)

조국의 반격으로 흥미진진하게 흘러가는 한국의 정치판 - 데뷰와 동시에 한동훈 장관에게 던진 4개의 질문 (updated at 2024-02-15)

2024년 카타르 아시안컵 4강전 전날 내분사태로 갑자기 회자되는 이승우선수의 친화력 (created at 2024-02-15)

카카오뱅크 금융거래종합보고서/잔액증명서/거래내역서 발급 방법 (created at 2024-02-14)

아이가 최고의 스승이었다 (created at 2024-02-13)

이제는 국민 유행어로 등극한 한동훈의 "싫으면 시집가" (updated at 2024-02-13)

설 연휴 잔소리 메뉴판 - 이제 잔소리 하기전에 요금부터... (updated at 2024-02-10)

로버트 드니로의 70년 전 모습 (created at 2024-02-08)

카메라 어플로 만들어본 슈퍼걸 - 엄... 최종 작품은 왠지... (created at 2024-02-08)

앞트임 하고 새롭게 태어난 대한민국의 젊은 용사 (created at 2024-02-08)

비가 억수로 내리던 2024년의 2월 어느날 캘리포니아의 밤 카니예 웨스트와 그의 아나 비앙카 센소리 (updated at 2024-02-08)

스케방형사 1화 - 수수께끼의 전학소녀사키 (created at 2024-02-05)

백제와 일본의 교류가 가장 활발했던 시기는 근초고왕 시대 (created at 2024-02-05)

일에 찌들은 아빠가 꿈에서 깨어나지 않자 구출해주는 짱구 (created at 2024-02-03)

이제는 할아버지가 된 휴 그랜트(Hugh Grant)가 블랙핑크 콘서트에 다녀온 후 소감 (created at 2024-02-03)

다시 한번 감상해보는 추억의 날리면 패러디 (updated at 2024-02-01)

25년간 노예로 살다가 돌아온 남동생 (created at 2024-02-01)

가까우면서도 멀게 느껴지는 나라 일본 (created at 2024-02-01)

친구와 비교하다가 이혼하게 된 부부 (created at 2024-02-01)

요꼬 미나미노의 바람의 마도리걸(風のマドリガル) (created at 2024-01-30)

옛날 어린이들이 신문을 챙겨봤던 이유 (created at 2024-01-30)

Remaster된 요꼬 미나미노(南野陽子)의 판도라의 연인(パンドラの恋人) (updated at 2024-01-30)