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://luckygg.tistory.com/226
'C, C++' 카테고리의 다른 글
스마트 포인터 make_unique, make_shared로 사용을 권장하는 이유 (0) | 2023.08.13 |
---|---|
[C++17] Header 파일 존재 유무 확인하기 (0) | 2023.08.01 |
「C++17」 static inline 멤버 변수 (0) | 2023.05.19 |
「C++11」 Class의 초기화 방법 3가지 (0) | 2023.04.30 |