Compartilhar via


_CrtSetAllocHook

Instala uma função de alocação definida pelo cliente vinculando-a ao processo de alocação de memória de depuração em tempo de execução C (somente versão de depuração).

Sintaxe

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

Parâmetros

allocHook
Nova função de alocação definida pelo cliente a ser vinculada ao processo de alocação de memória de depuração em tempo de execução C.

Valor retornado

Retornará a função de gancho de alocação previamente definida ou NULL se allocHook for NULL.

Comentários

_CrtSetAllocHook permite que um aplicativo vincule sua própria função de alocação ao processo de alocação de memória da biblioteca de depuração em tempo de execução C. Como resultado, todas as chamadas a uma função de alocação de depuração para alocar, realocar ou liberar um bloco de memória disparam uma chamada à função de gancho do aplicativo. O _CrtSetAllocHook fornece um aplicativo com um método fácil para testar como o aplicativo trata situações de memória insuficiente, a capacidade de examinar padrões de alocação e a oportunidade de registrar informações de alocação para análise posterior. Quando _DEBUG não está definido, as chamadas para _CrtSetAllocHook são removidas durante o pré-processamento.

A função _CrtSetAllocHook instala a nova função de alocação definida pelo cliente especificada em allocHook e retorna a função de gancho definida anteriormente. O seguinte exemplo demonstra como um gancho de alocação definido pelo cliente deve ser prototipado:

int YourAllocHook( int allocType, void *userData, size_t size,
                   int blockType, long requestNumber,
                   const unsigned char *filename, int lineNumber);

O allocType argumento especifica o tipo de operação de alocação (_HOOK_ALLOC, _HOOK_REALLOCe _HOOK_FREE) que disparou a chamada para a função de gancho da alocação. Quando o tipo de alocação de gatilho é _HOOK_FREE, userData é um ponteiro para a seção de dados do usuário do bloco de memória prestes a ser liberado. No entanto, quando o tipo de alocação de gatilho é _HOOK_ALLOC ou _HOOK_REALLOC, userData é NULL porque o bloco de memória ainda não foi alocado.

size especifica o tamanho do bloco de memória em bytes, blockType indica o tipo do bloco de memória, requestNumber é o número de ordem de alocação do objeto do bloco de memória e, se disponível, filename e lineNumber especificam o nome do arquivo de origem e o número de linha em que a operação de alocação de gatilho foi iniciada.

Depois que a função de gancho concluir o processamento, ela deve retornar um valor booliano, que explica ao processo principal de alocação em tempo de execução C como continuar. Quando a função de gancho deseja que o processo de alocação principal continue como se a função de gancho nunca tivesse sido chamada, a função de gancho deve retornar TRUE, o que faz com que a operação de alocação de acionamento original seja executada. A função de gancho pode coletar e salvar informações de alocação para análise posterior, sem interferir na operação de alocação atual ou no estado do heap de depuração.

Quando a função de gancho desejar que o processo de alocação principal continue como se a operação de alocação de gatilho tivesse sido chamada e falhado, a função de gancho deverá retornar FALSE. A função de gancho pode simular uma ampla variedade de condições de memória e depurar estados de heap para testar como o aplicativo lida com cada situação.

Para limpar a função de gancho, passe NULL para _CrtSetAllocHook.

Para obter mais informações sobre como _CrtSetAllocHook pode ser usado com outras funções de gerenciamento de memória ou como escrever suas próprias funções de gancho definidas pelo cliente, consulte Depurar gravação de função de gancho.

Observação

_CrtSetAllocHook não é suportado em /clr:pure. As opções do compilador /clr:pure e /clr:safe foram preteridas no Visual Studio 2015 e removidas no Visual Studio 2017.

Requisitos

Rotina Cabeçalho necessário
_CrtSetAllocHook <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

Para encontrar um exemplo de como usar _CrtSetAllocHook, confira crt_dbg2.

Confira também

Rotinas de depuração
_CrtGetAllocHook