수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1620948
  • Today | 328
  • Yesterday | 482

Programming/MFC2007/03/21 09:25

MFC에서 NULL을 비교하는 것은 의미가 없다.

원본 : http://www.debuglab.com/knowledge/mfcnull.html

1.요약

char* p = new char [33]; 

if (!p) 

{ 

    // 할당 실패.. 

} 

위와 같은 코드는 MFC에서 아무일도 하지 않습니다


2.본문

많은 분들이 위와 같이 할당이 실패한 경우를 비교하고 계시지만 MFC를 사용하고 계시다면 위의 코드는 아무런 일을 하지 않습니다.

왜냐면, MFC는 할당이 실패한 경우 CMemoryException*을 반환하도록 operator new를 재정의하고 있기 때문입니다.

다시 말해서, 할당이 실패한 경우에는 new 에서 반환된 값이( NULL이겠죠?) p 에 대입되는 코드 조차도 전혀 실행되지 않습니다.

당연히 exception은 스택을 거슬러 거슬러 최초의 catch() 문에 도착하게 되겠죠.

최초의 catch문조차 존재하지 않는다면 프로그램은 비정상 종료하게 될테고, 만약 존재한다면 그곳에서 적절한 처리를 해주어야겠죠.

AfxCallWndProc() 는 실제로 여러분의 메시지 핸들러를 호출해주는 함수중에 하나인데, 다행이도 이곳에는 예외를 처리하는 catch 문이 존재합니다.

이는 OnOK() 같은 핸들러에서 메모리 할당에 실패한 경우 고맙게도 메모리가 부족하다는 메시지를 출력해주고 아무일 없었다는 듯이 계속 진행된다는 얘기가 됩니다.

결론적으로 여러분은 선택이 아니라 필수사항으로 다음과 같이 해주어야 합니다.

char* p = NULL; 

try 

{ 

    p = new char [33]; 

} 

catch( CMemoryException* e) 

{ 

    // 적당히 처리 혹은 e->ReportError(); 

    e->Delete(); 

} 

모든 소스를 수정하기에는 무리가 있는 경우도 있겠죠.

공식적인 방법인지는 모르겠지만, MFC 의 new handler를 대체하는 방법도 있습니다.

int MyHandler(size_t) 

{ 

    return 0; 

} 



AfxSetNewHandler(MyHandler); 

물론 스레드마다 해주어야 합니다. MFC 는 CRT의 _set_new_handler를 사용해서 new 핸들러를 설치하는 것이 아니기때문에, _set_new_handler 를 사용하는 경우는 동작하지 않는 것 같습니다.

MFC Internals에 관련된 내용이 나오지 않을까 하는 생각을 하는데요,


혹시 알고 계신 분을 답장글 남겨주시기 바랍니다.



- 2001.08.13 Smile Seo -

"MFC" 카테고리의 다른 글
  • Edit 컨트롤에서 Tab 키 넣기 (0)2007/03/21
  • GUID 생성하기 (0)2007/03/21
  • MFC에서 NULL을 비교하는 것은 의미가 없다. (0)2007/03/21
  • URL을 파싱하자 (0)2007/03/19
  • 사용하지 않는 인자에 대한 warning 없애기 (0)2007/03/19
2007/03/21 09:25 2007/03/21 09:25
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2710

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 528 529 530 531 532 533 534 535 536 ... 2998  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 프로젝트 관리
  • String Conversion
  • 식당동
  • 미래관
  • List Control
  • random
  • 루브르 박물관
  • HP
  • 확장자
  • Password
  • 마이크로 포맷
  • 데이터 전달
  • 스카치블루
  • Kernel
  • NIDS
  • Semantic Web
  • 데이터 소유
  • MIB
  • pair
  • J&B 제트

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 11/21
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.