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