아래 프로그램을 돌려보면 릭이 잡히기도 하고 안잡히기도 한다, 즉 프로그램 내에서 _CrtSetDbgFlag 으로는 한계가 있다는 것을 알 수 있다



#include <windows.h>

#include <crtdbg.h>

#include <process.h>

#include <iostream>


UINT WINAPI ProcessIO(LPVOID lpParameter)

{


int* p = new int;


return 0;

}


int _tmain(int argc, _TCHAR* argv[])

{


_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

UINT ulThreadID = 0;

HANDLE m_hThread = (HANDLE) _beginthreadex (NULL, NULL, ProcessIO, NULL, NULL, &ulThreadID);

CloseHandle(m_hThread);

WaitForSingleObject( m_hThread, INFINITE );


return 0;

}












http://happyq.egloos.com/3505278


음... 멀티스레드 프로그램에서 효과가 없다는 것은 Crt Debug함수에 대한 설명이었습니다. 그런 경우엔 LeakDiag 등의 다른 방법을 사용해야 합니다. ^^



Visual Leak Detector - Enhanced Memory Leak Detection for Visual C   *  Visual memory leak detector - 사내양's 개발자 노트 * Native Code에서 Memory Leak을 잡는 방법-1   -  Leak Debugging&#40;1&#41; - CRT 디버그함수를 이용한 메모리 누수&#40;Memory Leak&#41; 탐지하기  * Umdh.exe를 사용하여 메모리 누수를 찾는 방법    - Private Bytes는 프로세스에 할당되었지만 다른 프로세스와 공유하지 않는 총 메모리   - Virtual Bytes는 프로세스가 사용하는 가상 주소 공간의 현재 크기를 바이트로 나타낸 것   - Virtual Bytes를 모니터링하여 가상 메모리가 사용되는지 확인* Debugging Tools for Windows &#40;MSDN&#41;   - Debugging Tools for Windows - Overview &#40;WHDC&#41;* Leak Debugging&#40;2&#41; - LeakDiag로 메모리 누수 디버깅하기 &#40;Debugging Memory Leak with LeakDiag&#41;    - 좋은 툴인 것 같다.

반응형

+ Recent posts