일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 이륜차
- 자바
- QT
- 알람프로그램
- Qt OpenGL
- 고속도로
- QTcpServer
- 자료구조
- HTML
- 재귀함수
- 잡담
- 안드로이드
- 마영전
- Java
- Qt4
- 디자이어HD
- 양평역
- c언어
- 스타크래프트2
- FFI
- qt 설치
- 스타2
- android SAF
- 윈도우7
- 엑티브엑스
- 오토바이
- 정성하
- 바이크
- Qt 소켓프로그래밍
- vuejs
- Today
- Total
프로그래밍과 잡담
Memory Leck 잡기 [비주얼 스튜디오] 본문
/////////Memory Leck /////////////
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__ )
#define new DEBUG_NEW
#endif
위에 있는걸 헤더 파일이던 main 위에던 같에 아무데나 붙여 넣는다.
그리고 main(이 main 함수는 WinMain이 될수도 있다.) 함수에
#if defined(DEBUG) | defined(_DEBUG)
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
이걸 붙여 넣는다..
이런 식으로
int main(void)
{
#if defined(DEBUG) | defined(_DEBUG)
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
int* k;
k = new int; //일부러 메모리릭을 발생
//메모리를 delete를 안시킨다.
_CrtDumpMemoryLeaks(); //요걸 안하면 디버그 모드해도 안뜬다
return 0;
}
위에 있는 식으로 하고나서 디버그 모드로 들어가면 이렇게 뜬다.
'테스트.exe': 'C:\WINDOWS\system32\usp10.dll' 로드
'테스트.exe': 'C:\WINDOWS\system32\msvcrt.dll' 로드
Detected memory leaks!
Dumping objects ->
\main.cpp(16) : {125} normal block at 0x009166D0, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.
0x009166D0에서 메모리릭이 발생했다는 소리이다. 확인 하는 방법은
125라는 수를 _CrtSetBreakAlloc이라는 함수에다가 인자로 넣는다.
_CrtSetBreakAlloc(125);
그러면 메모리릭이 생겨난 부분으로 이동한다.
//////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
나도 이런 기능은 몰랐는데 까먹으면 다시 볼려고 써 놓는다..
'프로그래밍 > C,C++, Win32Api' 카테고리의 다른 글
[C언어] 기초 3 (0) | 2009.03.11 |
---|---|
[C언어] 기초 2-1 (0) | 2009.03.11 |
[C언어]기초2 (0) | 2009.03.11 |
[C언어] 기초 1 (0) | 2009.03.11 |
[Win32 API]버튼의 폰트 바꾸기.. (0) | 2009.03.11 |