메모리 누수 체크하기

Fuji ㅣ 2023. 9. 17. 17:27


C++에는 메모리 누수를 체크해주는 CRTDBG가 있다.

 

_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

 

동적할당을 해서 일부러 메모리 누수를 시키고 실험을 하면 터미널 창에 아래와 같은 문구가 나온다

 

 

{154} 이 부분을 주목하면 되는데 이 부분이 메모리 누수가 난 메모리가 할당된 순서다. 

당연히 저 부분만 보면 어떤 부분에 누수가 난 지 알 수가 없기 때문에
표시되는 할당 순서를 이용해서 메모리 누수가 난 코드에 break point를 설정할 수 있다.

 

_CrtSetBreakAlloc( 154 );

 

이 함수를 사용하면 메모리 누수가 발생한 메모리가 할당되는 구문에 찾아가서 break해준다. 

단, 천천히 코드를 따라가면서 break를 거는 방식이므로
되도록이면 프로그램이 시작되고 나서 바로 함수를 사용해주어야 한다. 

만약 소스 파일과 라인 수를 표시해서 메모리 누수가 난 지점을 찾고 싶다면 아래 매크로를 추가해주면 된다.

 

#ifdef _DEBUG
#define new new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#endif

 

 


Ref : https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/find-memory-leaks-using-the-crt-library?view=msvc-170 

 

CRT 라이브러리로 메모리 누수 찾기

C/C++ 디버거 및 CRT(C 런타임 라이브러리)를 통해 메모리 누수를 찾는 방법을 알아봅니다. 포함되는 기술로는 메모리 누수 보고서와 메모리 스냅샷 비교가 있습니다.

learn.microsoft.com

Ref : https://luckygg.tistory.com/226

 

[디버깅] 메모리 누수를 점검하는 방법 - CRTDBG (예제 포함)

메모리 누수와 관련된 포스팅은 아래 링크를 참고해주세요. [디버깅] 메모리 누수와 점검하는 방법 소개 [디버깅] 메모리 누수와 점검하는 방법 소개 소개 Unmanaged Code인 C++은 메모리 할당과 해제

luckygg.tistory.com