Compartilhar via


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

This topic applies to:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Pro, Premium e Ultimate

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

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 tornarem todas as chamadas para funções de biblioteca de tempo de execução c alocar memória interno. O _CRT_BLOCK blocos podem ser ignorados, incluindo o código como, por exemplo, o seguinte no início da sua alocação 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 em seu gancho pode interceptar o programa em um loop infinito. Por exemplo, printf faz alocação interno. Se o seu código de gancho chama printf, em seguida, 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 de relatório _CRT_BLOCK operações de alocação, uma maneira de contornar essa restrição é usar funções de API do Windows, em vez de usar as 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 o gancho de alocação em um loop infinito.

Se você examinar os arquivos de origem da biblioteca de tempo de execução, você verá que a alocação padrão capturar a função, CrtDefaultAllocHook (que simplesmente retorna TRUE), está localizado em um arquivo separado de 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 que é executado antes do aplicativo principal função, você pode substituir essa função padrão com uma de sua preferência, em vez de usar _CrtSetAllocHook.

Consulte também

Tarefas

Exemplo de crt_dbg2: Funções de gancho de depuração c Run-Time.

Outros recursos

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