Compartilhar via


Como: Tirar instantâneos da memória

This topic applies to:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Pro, Premium e Ultimate

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável
ObservaçãoObservação

Caixas de diálogo e comandos de menu que você vê podem diferir das descritas na Help dependendo das suas configurações ativas ou edição. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. For more information, see Trabalhando com configurações.

Este tópico mostra como tirar instantâneos da memória para ajudar a localizar um vazamento de memória.

Para detectar um vazamento de memória

  1. Criar um CMemoryState Members objeto e a chamada a CMemoryState::Checkpoint função de membro. Isso cria o primeiro instantâneo da memória.

  2. Após o programa executa suas operações de alocação e desalocação de memória, criar outro CMemoryState objeto e a chamada Checkpoint para o objeto. Isso obtém um segundo snapshot do uso da memória.

  3. Criar um terceiro CMemoryState objeto e chamar seu CMemoryState::Difference função de membro, fornecendo como argumentos as duas anteriores CMemoryState objetos. Se houver uma diferença entre os estados de memória de dois a Difference função retorna um valor diferente de zero. Isso indica que alguns blocos de memória que não foram desalocados.

    Este exemplo mostra a aparência do código:

    // 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
    

    Observe que as instruções de verificação de memória são bracketed por #ifdef _DEBUG / #endif bloqueia de modo que eles são compilados apenas em versões de depuração do Win32 do seu programa.

    Agora que você sabe que existe de um vazamento de memória, você pode usar a função de membro de outro, CMemoryState::DumpStatistics, em Visualização de estatística de memória que ajudarão você a localizar o proprietário.

Consulte também

Referência

_DEBUG

Outros recursos

Detecção de vazamento de memória no MFC