Partilhar via


Ganchos de alocação e alocações de memória C em tempo de execução

Este tópico se aplica a:

Edição

Visual Basic

C#

C++

Desenvolvedores Web

Express

Somente nativo

Padrão

Somente nativo

PRO e equipe

Somente nativo

Legenda de tabela:

Aplica-se

Não é aplicada

Comando ou comandos oculta por padrão.

Uma restrição muito importante sobre as funções de gancho de alocação é que eles devem ignorar explicitamente _CRT_BLOCK blocos (as alocações de memória feitas internamente pelo C em time de execução funções da biblioteca) se fizerem quaisquer chamadas ao C em time de execução funções da biblioteca que alocam memória interna. The _CRT_BLOCK blocos podem ser ignorados com a inclusão de código, sistema autônomo o seguinte no início de sua alocação capturar a função:

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

Se sua alocação de gancho não ignora _CRT_BLOCK blocos e, em seguida, qualquer C em time de execução função de biblioteca chamada no gancho do seu pode interceptar o programa em um loop infinito. Por exemplo, printf faz uma alocação interna. Se seu código de gancho chama printf, em seguida, a alocação resultante fará com que o gancho a ser chamado novamente, que chamará printf novamente e assim por diante até que estouros de pilha.Se você precisar informar _CRT_BLOCK operações de alocação, uma maneira de contornar essa restrição é utilizar funções da API do Windows, em vez de C em time de execução funções, para formatação e de saída. Como as APIs do Windows não usam o C em time de execução biblioteca heap, eles não serão executado o gancho de alocação em um loop infinito.

Se você examinar o em time de execução biblioteca de arquivos de fonte, você verá a alocação padrão para capturar a função, CrtDefaultAllocHook (que simplesmente retorna TRUE), está em um arquivo separado de seu próprio, DBGHOOK.C.Se você desejar que o gancho de alocação a ser chamado até mesmo para as alocações feitas pelo código de inicialização de time de execução que é executado antes principal função, você pode substituir essa função padrão por uma de sua preferência, em vez de usar _CrtSetAllocHook.

Consulte também

Tarefas

Exemplo de crt_dbg2: C Run-Time Depurando gancho funções

Outros recursos

Texto de função de gancho de depurar