kyuseo의 게임 프로그래밍

MFC 템플릿(Template) 클래스 CMap< CString, LPCTSTR, int, int > 의 주의사항 본문

C++ 개발

MFC 템플릿(Template) 클래스 CMap< CString, LPCTSTR, int, int > 의 주의사항

kyuseo 2008. 3. 11. 18:38

개요..

 

매우 편리하고 유용한 MFC 템플릿(Template) 클래스 CMap< CString, LPCTSTR, int, int > 의 사용 주의 사항을 설명 드립니다.

 

 

주의사항

 

CMap 사용하기 무척 편리합니다. 특히 스트링(String)맵의 경우 사용용도가 높으나 아래와 같이 오류발생 가능이 있는 코드가 존재하니 주의해서 사용합니다.

 

 

올바른 코드

 

    CMap< CString, LPCTSTR, int, int > map;

    map["One"] = 1;

    map["Two"] = 2;

    CString s1 = map["One"];

    CString s2 = map["Two"];

    CString s3 = map["Three"];

    CString s4 = map[ NULL ];

 

 

문제의 코드

 

    char* sz = "One";

    CString s1 = map[ sz ];

    sz = NULL;

    CString s2 = map[ sz ];

 

위의 코드에서는 sz 가 NULL 이 되면 치명적인 오류가 발생할 수 있으니 주의합니다.

(특히 게임 서버에서 사용할 경우에 주의합니다.)

 

 

보너스 오류 발생 코드

 

char* sz = NULL;

int len = strlen( sz );

strcmp( sz, "123" );

 

위와 이 strcmp, strlen 등의 함수를 사용할 경우에는 인자가 NULL 이면 프로그램이 다운됩니다.