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).

Sintaxe

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 retornado

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 a detecção de perda de memória interrompendo em um ponto específico da alocação de memória e rastreando de volta até 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 para _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 Rastreamento de solicitações de alocação de heap. 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 do heap de depuração CRT.

Requisitos

Rotina Cabeçalho necessário
_CrtSetBreakAlloc <crtdbg.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

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);
}

Confira também

Rotinas de depuração