Compartilhar via


Ganchos de alocação e as alocações de memória de tempo de execução c

Uma restrição muito importante nas funções de gancho de alocação é que eles devem ignorar explicitamente _CRT_BLOCK blocos (as alocações de memória feitas internamente pelas funções de biblioteca de tempo de execução C) se eles fazem quaisquer chamadas de funções de biblioteca de tempo de execução c alocar memória interna.O _CRT_BLOCK blocos podem ser ignorados, incluindo o código como o seguinte no início de sua alocação de capturar a função:

    if ( nBlockUse == _CRT_BLOCK )
        return( TRUE );

Se o gancho de alocação não ignorar _CRT_BLOCK bloqueia, então qualquer função de biblioteca de tempo de execução c chamada no seu gancho pode interceptar o programa em um loop infinito.Por exemplo, printf faz uma alocação interna.Se seu código de gancho chama printf, e a alocação resultante fará com que o gancho ser chamado novamente, que chamará printf novamente, e assim por diante até que os estouros de pilha.Se você precisar relatório _CRT_BLOCK operações de alocação, uma forma de contornar essa restrição é usar funções de API do Windows, em vez de funções de tempo de execução C, para formatação e de saída.Como as APIs do Windows não usam a pilha de biblioteca de tempo de execução C, eles não ajustará o gancho de alocação em um loop infinito.

Se você examinar os arquivos de origem de biblioteca de tempo de execução, você verá que a alocação padrão conectar função, CrtDefaultAllocHook (que simplesmente retorna TRUE), localizado em um arquivo separado do seu próprio, DBGHOOK.C.Se você deseja que o gancho de alocação a ser chamado até mesmo para as alocações feitas pelo código de inicialização de tempo de execução é executado antes do aplicativo principal função, você pode substituir essa função padrão com uma de suas próprias, em vez de usar _CrtSetAllocHook.

Consulte também

Tarefas

crt_dbg2 Sample

Outros recursos

Escrita de função de gancho de depuração.