메모리 누수 점검
1. CRT 라이브러리 사용
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
명령문 작성
_CrtDumpMemoryLeaks();
종료 시점 앞에 해당 코드 호출
ㅡ> 위 두가지 수행 시 메모리 누수 보고서가 아래와 같이 출력
_CrtSetBreakAlloc(18);
main 함수 첫 부분에 해당 코드 추가 시 18번째 메모리 할당 지점에서 실행이 중단 ㅡ> 누수 지점 확인 가능
But, 컴파일 재진행 시 메모리 위치가 바뀔 수도 있어 아래 방법을 추천
* 구체적인 누수 위치 확인을 위한 추가 옵션 (소스 파일과 라인 수 표시)
#ifdef _DEBUG
#define new new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#endif
해당 코드 추가 시 소스 파일과 라인 수가 표시되고 더블 클릭이나 F4를 입력 시 메모리 누수 지점으로 이동
ㅡ> new를 new( __NORMAL_BLOCK, __FILE__, __LINE__)으로 치환하여 세부 내용을 아래와 같이 출력
종료시점 앞에 _CrtDumpMemoryLeaks()를 호출하는 대신 main함수 첫 부분에 아래 코드를 추가해줘도 메모리 누수 지점을 찾을 수 있음
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
필자의 경우 _CrtDumpMemoryLeaks()을 프로그램 종료 직전에 호출하는 것으로는 클래스 소멸자의 호출 시기와 맞지 않아 메모리 누수가 감지되던 것이 위의 코드를 쓰는 것으로 대체하고 나서는 메모리 누수가 감지되지 않았음
* 위의 코드를 적용시키고 일부러 누수를 발생시킨 결과 누수가 제대로 감지되는 것으로 보아 위에서 말했듯이 소멸자의 호출 시기와 맞지 않아 메모리 누수가 감지되던 것으로 보임
2. Dr.Memory 사용
- https://drmemory.org/ 에서 프로그램 설치 ㅡ> 바탕화면에 프로그램 아이콘 생성
- 메모리 누수 점검할 프로그램의 실행 파일 생성
- 해당 실행 파일을 아래 화면처럼 바탕화면의 Dr.memory 아이콘에 드래그 앤 드랍
참고자료
https://luckygg.tistory.com/226
[디버깅] 메모리 누수를 점검하는 방법 - CRTDBG (예제 포함)
메모리 누수와 관련된 포스팅은 아래 링크를 참고해주세요. [디버깅] 메모리 누수와 점검하는 방법 소개 [디버깅] 메모리 누수와 점검하는 방법 소개 소개 Unmanaged Code인 C++은 메모리 할당과 해제
luckygg.tistory.com
0054 - Dr. Memory 로 메모리 누수 확인하기
윈도우의 Visual Studio 에서는 Visual Leak Detector 사용하거나 리눅스의 QT Creator 에서는 Valgrind 를 사용하면 비교적 메모리 누수를 쉽게 찾을 수 있지만, 중간에 위치한 윈도우의 QT Creator 에서 메모리
cakel.tistory.com
CRT 라이브러리로 메모리 누수 찾기
C/C++ 디버거 및 CRT(C 런타임 라이브러리)를 통해 메모리 누수를 찾는 방법을 알아봅니다. 포함되는 기술로는 메모리 누수 보고서와 메모리 스냅샷 비교가 있습니다.
learn.microsoft.com
'C++' 카테고리의 다른 글
[C++] STL 요약 정리 #1 (0) | 2025.02.17 |
---|---|
[C++] STL(Standard Template Library) (0) | 2025.01.15 |
[C++] 오버로딩(overloading), 오버라이딩(overriding), 템플릿(Template) (1) | 2024.12.31 |
[C++] 참조자(Reference) (0) | 2024.12.26 |
[C++] 포인터(Pointer) (0) | 2024.12.24 |