Compartilhar via


_CrtSetBreakAlloc

Estabelece um ponto de interrupção em um número de ordem de alocação de objeto especificado (somente versão de depuração).

long _CrtSetBreakAlloc(     long lBreakAlloc   );

Parâmetros

  • lBreakAlloc
    Número da ordem de alocação para qual o ponto de interrupção deve ser definido.

Valor de retorno

Retorna o número da ordem de alocação do objeto anterior que continha um ponto de interrupção definido.

Comentários

_CrtSetBreakAlloc permite que um aplicativo realize detecção de vazamento de memória, interrompendo em um ponto específico da alocação de memória e rastreando a origem da solicitação. A função usa o número da ordem de alocação do objeto sequencial atribuído ao bloco de memória quando ele foi alocado no heap. Quando _DEBUG não está definido, as chamadas a _CrtSetBreakAlloc são removidas durante o pré-processamento.

O número da ordem de alocação do objeto é armazenado no campo lRequest da estrutura _CrtMemBlockHeader, definida em Crtdbg.h. Quando as informações sobre um bloco de memória são relatadas por uma das funções de despejo de depuração, esse número é colocado entre chaves, como {36}.

Para obter mais informações sobre como _CrtSetBreakAlloc pode ser usado com outras funções de gerenciamento de memória, consulte Solicitações de alocação da heap de rastreamento. Para obter mais informações sobre como os blocos de memória são alocados, inicializados e gerenciados na versão de depuração do heap de base, consulte Detalhes da pilha de depuração CRT.

Requisitos

Rotina

Cabeçalho necessário

_CrtSetBreakAlloc

<crtdbg.h>

Para obter mais informações sobre compatibilidade, consulte Compatibilidade na Introdução.

Bibliotecas

Somente versões de depuração de bibliotecas de tempo de execução C.

Exemplo

// crt_setbrkal.c
// compile with: -D_DEBUG /MTd -Od -Zi -W3 /c /link -verbose:lib -debug

/*
 * In this program, a call is made to the _CrtSetBreakAlloc routine
 * to verify that the debugger halts program execution when it reaches
 * a specified allocation number.
 */

#include <malloc.h>
#include <crtdbg.h>

int main( )
{
        long allocReqNum;
        char *my_pointer;

        /* 
         * Allocate "my_pointer" for the first
         * time and ensure that it gets allocated correctly
         */
        my_pointer = malloc(10);
        _CrtIsMemoryBlock(my_pointer, 10, &allocReqNum, NULL, NULL);

        /* 
         * Set a breakpoint on the allocation request
         * number for "my_pointer"
         */
        _CrtSetBreakAlloc(allocReqNum+2);

        /* 
         * Alternate freeing and reallocating "my_pointer"
         * to verify that the debugger halts program execution
         * when it reaches the allocation request
         */
        free(my_pointer);
        my_pointer = malloc(10);
        free(my_pointer);
        my_pointer = malloc(10);
        free(my_pointer);
}

Equivalência do .NET Framework

Não aplicável. Para chamar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Rotinas de depuração