블로그 이미지
이태원에서 사는 다섯식구의 무직 가장. 흰둥에미

카테고리

분류 전체보기 (184)
Itaewon (2)
ryu's?? (1)
20121210이전 (20)
20130827이전 (147)
soo'study (13)
Total41,824
Today0
Yesterday3

디버깅

20130827이전/C&C++ / 2013.04.27 07:41

MFC로 뭔가를 만들다가..

어느 순간 조그마한 메모리 릭이 발생했다.

new를 DEBUG_NEW로 사용되게 된 부분이 있어서 우연찮게 발견했는데,

도저히 못 잡겠는거다.


그래서 디버깅디버깅 조사


많은 사람들이 무난하게 사용하고 있는 듯한 아래 방법을 사용.

헤더에 아래를 디파인 및 포함하고,

#define _CRTDBG_MAP_ALLOC

#include <stdlib.h>

#include <crtdbg.h>

프로그램 종료시 아래 함수의 호출을 통해 메모리 릭을 확인할 수 있다는 걸 알았음.

_CrtDumpMemoryLeaks();


근데 두둥~~~

strcore.cpp 관련해서 졸라 많이 릭이 떨어진다~~ 그 외에 몇군데도 떨어지고.

일할때는 주로 CString, char, TCHAR 타입에서 많이 발생했던듯 한데...


가만히 몇군데를 아래 함수를 이용해 살펴 보았는데 뭔가 이상.

_CrtSetBreakAlloc(Num);


짐작컨데, 메모리 할당하는 함수와 해제하는 부분이 떨어져 있는 부분들에 유난히 눈에 띄게 릭이 발생한다고 경고한다.

뭔가 좀 이상한데, 이렇게까지 릭이 날 것 같지 않은데..

할당시기와 해제시기 체크로직의 문제로 릭이 아닌것도 출력되는듯 짐작해보지만 아직 정확히 모르겠음.


아 할일이 태산인데... 이상한데 꽂혔네~


추가 - MSDN에서 발췌, 하지만 정확한 이해는 안감. 아마 Crt디버깅이라서 MFC에서 조따구로 나온듯함.

간혹 _CrtDumpMemoryLeaks가 메모리 누수를 잘못 표시하는 경우도 있습니다. 이러한 오류는 내부 할당을 _CRT_BLOCK이나 _CLIENT_BLOCK 대신 _NORMAL_BLOCK으로 표시하는 라이브러리를 사용할 때 발생할 수 있습니다. 이 경우 _CrtDumpMemoryLeaks가 사용자 할당과 내부 라이브러리 할당을 구별할 수 없게 됩니다. _CrtDumpMemoryLeaks를 호출한 이후에 라이브러리 할당을 위한 전역 소멸자가 실행되면 모든 내부 라이브러리 할당이 메모리 누수로 보고됩니다. Visual Studio .NET 이전 버전의 표준 템플릿 라이브러리에서는 _CrtDumpMemoryLeaks가 이러한 가양성(false positive)을 보고했지만, 최신 릴리스에서는 이 문제가 해결되었습니다.


'20130827이전 > C&C++' 카테고리의 다른 글

Collada 라이브러리에 대한 짧은 생각  (0) 2013.05.04
XML 파싱중에..  (0) 2013.04.30
디버깅  (0) 2013.04.27
구조체 ( struct )  (1) 2013.02.20
memory 관련 함수들  (0) 2013.02.18
레퍼런스 변수  (0) 2013.02.13
Posted by 흰둥에미

최근에 달린 댓글

최근에 받은 트랙백

글 보관함