CAFE

MFC와 OpenCV

메모리 누수 (Memory leak) 찾기

작성자한창호|작성시간16.11.02|조회수314 목록 댓글 0


메모리 누수를 찾는 방법은 여러가지가 있는것 같네요. 이중에 많이 사용하는 방법을 다른 사이트에서 찾아 옮겨봅니다.


1) CRT 라이브러리를 사용하여 메모리 누수 찾기


// 초기화 한다.

#define _CRTDBG_MAP_ALLOC

#include <stdlib.h>

#include <crtdbg.h>


// 종료 지점이 여러 개인 경우 main() 함수 또는 WinMain() 함수 시작부분에 다음 함수를 호출한다.

// CWinApp() 생성자 함수 or InitInstance() 함수, 또는 main() 함수 시작 부분
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );


 // 응용 프로그램이 종료될 때 메모리 누수 보고서를 표시할 수 있다.

// ~CWinApp() 소멸자 함수 or ExitInstance() 함수, 또는 main() 함수 시작 부분

// 메모리 해제가 되지 않은 전역변수의 경우 누수현상을 보인다고 나타날 수 있다.

_CrtDumpMemoryLeaks();   


// 프로그램이 종료시에 실행 시키려면 다음과 같은 방법도 있습니다.

#ifdef _DEBUG
   _onexit(_CrtDumpMemoryLeaks);
#endif


// 메모리 참조값으로 소스를 찾아가려면 다음과 같이 한다. 만약 멈추기 않는다면 다음 함수가 먼저 실행을 시켜야 한다는 거죠.

// 다음 같은 경우는 전역변수가 해제 안된 경우에 속한다. 따라서 그냥 메모리 위치만 보여준다.

// {146916} normal block at 0x00395A3A0, 48 bytes long.

_CrtSetBreakAlloc(146916);



2) MFC를 사용하는 경우 다음 소스코드를 *.cpp에 추가한다.


#ifdef _DEBUG
#define new
DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



3) 메모리 누수 리포트


Detected memory leaks!
Dumping objects ->
d:\sample\sample.cpp(35) : {48} client block at 0x003739D0, subtype 0, 4 bytes long.
 Data: <(   > 28 00 00 00
d:\sample\sample.cpp(34) : {47} client block at 0x00373990, subtype 0, 4 bytes long.
 Data: <    > 1E 00 00 00
Object dump complete.




참고사이트:

https://msdn.microsoft.com/ko-kr/library/x98tx3cf.aspx

http://egloos.zum.com/sungod0/v/3561771

http://www.dreamy.pe.kr/zbxe/CodeClip/29504

메모리 누수, 침범에 대한 디버깅과 해결책

https://indidev.net/forum/viewtopic.php?f=5&t=396


다음검색
현재 게시글 추가 기능 열기
  • 북마크
  • 신고 센터로 신고

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼