메모리 누수 탐지 기능 사용

이 항목은 다음 언어에 적용됩니다.

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

Pro, Premium 및 Ultimate

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

메모리 누수를 탐지하는 데 사용하는 기본 도구는 디버거와 CRT(C 런타임 라이브러리) 디버그 힙 함수입니다.

디버그 힙 함수를 사용하려면 다음 문이 프로그램에 포함되어 있어야 합니다.

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

참고

#include 문은 위의 순서를 따라야 합니다.순서를 변경하면 사용하는 함수가 제대로 작동하지 않을 수 있습니다.

crtdbg.h를 포함하여 mallocfree 함수를 해당 디버그 버전인 _malloc_dbg_free_dbg에 매핑하여 메모리 할당과 할당 취소를 추적하도록 합니다.이 매핑은 _DEBUG가 정의된 디버그 빌드에서만 발생합니다.릴리스 빌드에서는 일반적인 malloc 함수와 free 함수가 사용됩니다.

#define 문은 CRT 힙 함수의 기본 버전을 해당 디버그 버전에 매핑합니다.이 문을 반드시 사용할 필요는 없지만 사용하지 않으면 메모리 누수 덤프에 유용하지 않은 정보가 포함될 수 있습니다.

이전 문을 추가한 후 프로그램에 다음 문을 포함하여 일반적으로 프로그램 종료 직전의 메모리 누수 정보를 덤프할 수 있습니다.

_CrtDumpMemoryLeaks();

디버거에서 프로그램을 실행하면 _CrtDumpMemoryLeaks출력 창에 메모리 누수 정보를 표시합니다.메모리 누수 정보가 다음과 같이 표시됩니다.

Detected memory leaks!Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

#define _CRTDBG_MAP_ALLOC 문을 사용하지 않으면 메모리 누수 덤프가 다음과 같이 표시됩니다.

Detected memory leaks!Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

_CRTDBG_MAP_ALLOC가 정의되지 않으면 다음 사항이 표시됩니다.

  • 메모리 할당 번호(중괄호 안에 표시)

  • 블록 형식(표준, 클라이언트 또는 CRT)

  • 16진수로 표기한 메모리 위치

  • 바이트로 표기한 블록 크기

  • 16진수로 표기한 처음 16바이트의 내용

_CRTDBG_MAP_ALLOC가 정의되면 누수된 메모리가 할당된 파일을 찾을 수 있습니다.파일 이름 뒤에 오는 괄호 안의 숫자(예: 20)는 파일에서의 줄 번호입니다.

메모리가 할당된 소스 파일의 줄로 이동하려면

  • 출력 창에서 파일 이름과 줄 번호가 있는 줄을 두 번 클릭합니다.

    -또는-

    출력 창에서 파일 이름과 줄 번호가 있는 줄을 선택하고 F4 키를 누릅니다.

_CrtSetDbgFlag

프로그램이 항상 동일한 위치에서 종료되는 경우에는 _CrtDumpMemoryLeaks를 쉽게 호출할 수 있습니다.프로그램이 여러 위치에서 종료될 수 있는 경우에는 종료할 수 있는 모든 위치에서 _CrtDumpMemoryLeaks를 호출하는 대신 프로그램 시작 부분에 다음 호출을 포함할 수 있습니다.

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

이 문은 프로그램이 종료될 때 자동으로 _CrtDumpMemoryLeaks를 호출합니다.위의 예제와 같이 비트 필드 _CRTDBG_ALLOC_MEM_DF_CRTDBG_LEAK_CHECK_DF를 모두 설정해야 합니다.

CRT 보고서 모드 설정

기본적으로 _CrtDumpMemoryLeaks는 위에서 설명한 대로 출력 창의 디버그 창으로 메모리 누수 정보를 덤프합니다._CrtSetReportMode를 사용해 다른 위치로 덤프하도록 다시 설정할 수 있습니다.

라이브러리를 사용할 경우 출력을 다른 위치로 다시 설정할 수 있습니다.이 경우 다음 문을 사용하여 출력 위치를 출력 창으로 다시 설정할 수 있습니다.

_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );

자세한 내용은 _CrtSetReportMode를 참조하십시오.

참고 항목

개념

메모리 누수 탐지 및 격리