다음을 통해 공유


방법: 메모리 스냅샷 보기

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

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

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

네이티브 전용

항목이 적용되지 않음

Pro, Premium 및 Ultimate

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

네이티브 전용

항목이 적용되지 않음

참고

표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 설정에 대한 작업을 참조하십시오.

이 항목에서는 메모리 누수를 찾기 위해 메모리 스냅숏을 보는 방법에 대해 설명합니다.

메모리 누수를 탐지하려면

  1. CMemoryState Members 개체를 만들고 CMemoryState::Checkpoint 멤버 함수를 호출합니다. 그러면 첫 번째 메모리 스냅숏이 만들어집니다.

  2. 프로그램이 메모리 할당 작업과 할당 취소 작업을 수행하면 다른 CMemoryState 개체를 만들고 해당 개체에 대해 Checkpoint를 호출합니다. 그러면 메모리 사용에 대한 두 번째 스냅숏이 만들어집니다.

  3. 세 번째 CMemoryState 개체를 만들고 이전의 두 CMemoryState 개체를 인수로 제공하여 CMemoryState::Difference 멤버 함수를 호출합니다. 두 메모리 상태가 서로 다르면 Difference 함수가 0이 아닌 값을 반환합니다. 이것은 할당이 취소되지 않은 메모리 블록이 있음을 나타냅니다.

    다음 예제는 해당 코드의 내용을 보여 줍니다.

    // Declare the variables needed
    #ifdef _DEBUG
        CMemoryState oldMemState, newMemState, diffMemState;
        oldMemState.Checkpoint();
    #endif
    
        // Do your memory allocations and deallocations.
        CString s("This is a frame variable");
        // The next object is a heap object.
       CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
    
    #ifdef _DEBUG
        newMemState.Checkpoint();
        if( diffMemState.Difference( oldMemState, newMemState ) )
        {
            TRACE( "Memory leaked!\n" );
        }
    #endif
    

    메모리를 검사하는 문은 프로그램의 Win32 Debug 버전에서만 컴파일되도록 #ifdef _DEBUG / #endif 블록에서 대괄호로 묶어야 합니다.

    이제 메모리 누수가 확인되었으므로 다른 멤버 함수인 CMemoryState::DumpStatistics를 사용하여 메모리 통계 보기를 통해 해당 위치를 찾을 수 있습니다.

참고 항목

참조

_DEBUG

기타 리소스

MFC에서 메모리 누수 탐지