Compartilhar via


_CrtSetAllocHook

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

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook 
);

Parâmetros

  • allocHook
    Nova função de alocação definida pelo cliente ao gancho no processo de alocação de memória de depuração de tempo de execução C.

Valor de retorno

Retorna a função definida anteriormente de gancho de alocação, ou NULL se allocHook é NULL.

Comentários

_CrtSetAllocHook permite que um aplicativo conectar sua própria função de alocação no processo de alocação de memória da biblioteca de depuração de tempo de execução C. No resultado, cada chamada a uma função de alocação de depuração para atribuir, realocar, ou liberar um bloco de memória dispara uma chamada à função de gancho do aplicativo. _CrtSetAllocHook fornece um aplicativo com um método fácil para testar como o aplicativo tratará insuficientes situações de memória, 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 for definido, as chamadas para _CrtSetAllocHook serão removidos durante pré-processamento.

A função de _CrtSetAllocHook instalar a nova função definida pelo cliente de alocação especificada em allocHook e retorna a função definida anteriormente de gancho. O exemplo a seguir demonstra como um gancho cliente definido de alocação deve ser protótipo:

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

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

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

Depois que a função de gancho conclusão do processamento, ele deverá retornar um valor booliano, que diz ao processo de alocação principal de tempo de execução C como continuar. Quando a função de gancho deseja que o processo de alocação principal para continuar como se a função de gancho tivesse sido chamada nunca, a função de gancho deve retornar TRUE. Isso faz com que a operação de gatilho original de alocação a ser executada. Usando essa implementação, a função de gancho pode coletar e salvar as informações de alocação para análise posterior, sem interferir com a operação de alocação ou o estado atual do heap de depuração.

Quando a função de gancho deseja que o processo de alocação principal para continuar como se a operação de gatilho de alocação esteve chamada e ele falhar, a função de gancho deve retornar FALSE. Usando essa implementação, a função de gancho pode simular uma ampla gama de condições de memória e os estados de heap de depuração para testar como o aplicativo tratará cada situação.

Para limpar a função de gancho, passe NULL a _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 definidas pelo cliente de gancho, consulte Gravação da função de gancho de depuração.

Dica

_CrtSetAllocHook não tem suporte em /clr:pure.

Requisitos

Rotina

Cabeçalho necessário

_CrtSetAllocHook

<crtdbg.h>

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

Bibliotecas

Versões de depuração das Bibliotecas em tempo de execução C somente.

Exemplo

Para obter um exemplo de como usar _CrtSetAllocHook, consulte crt_dbg2.

Equivalência do .NET Framework

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

Consulte também

Referência

Rotinas de depuração

_CrtGetAllocHook