(2022) 공부 (Study)/게임 개발 (Development)

Win32API - Windows App : 메모리 누수 체크 함수

수낭 2022. 8. 11. 18:15

C++에서 코드를 작성하다 보면, 동적 할당 된 메모리 관리에 대해 잘하고 있는지 의문이 들 때가 있다.
그럴 때에 사용하면 유용한 Windows 내장 함수를 알아보자.

 

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    // 메모리 누수(Lead) 체크
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    
    //_crtBreakAlloc();
    
    // Memory Leak 유발 코드 한 줄
    int* iTestValue = new int();
    ...
}

Windows App의 main 함수의 최상단에 _CrtSetDbgFlag 함수를 작성해주면 된다.

 

int* iTestValue = new int();

이후 일부러 Memory Leak이 발생하도록, 위와 같이 코드를 작성해주었다.

 

메모리 Leak에 대한 경고 출력 모습

위와 같이 Memory Leak에 대한 정보가 출력되는 모습이다.
(스마트 포인터를 안쓰는 경우에도 굉장히 유용한 듯 싶다.)

 

어디서 Memory Leak이 발생했는지 찾고 싶다면, 아래 함수를 사용하면 된다.

_CrtSetBreakAlloc(215);

어디서 Memory Leak이 발생했는지 직접 중단점을 걸어줘서 찾기 편하게 해준다.
(호출 스택을 통해서 찾을 수 있다.)

 

이상으로 포스팅을 마칩니다.