Compartilhar via


_calloc_dbg

Aloca um número de blocos de memória no heap com espaço adicional para um cabeçalho de depuração e sobrescrever buffers (somente a versão de depuração).

void *_calloc_dbg( 
   size_t num,
   size_t size,
   int blockType,
   const char *filename,
   int linenumber 
);

Parâmetros

  • num
    Número solicitado de blocos de memória.

  • size
    Solicitou o tamanho de cada bloco de memória (bytes).

  • blockType
    Solicitou um tipo de bloco de memória: _CLIENT_BLOCK ou _NORMAL_BLOCK.

    Para obter informações sobre os tipos de bloco de alocação e como eles são usados, consulte Tipos de blocos no Heap Debug.

  • filename
    Ponteiro para o nome do arquivo de origem que solicitou a operação de alocação ou NULL.

  • linenumber
    O número no arquivo de origem onde a operação de alocação foi solicitada de linha ou NULL.

O filename e linenumber parâmetros estão disponíveis somente quando _calloc_dbg foi chamado explicitamente ou o _CRTDBG_MAP_ALLOC pré-processador constante foi definida.

Valor de retorno

Após a conclusão bem-sucedida, esta função retorna um ponteiro para a parte do usuário de que o último bloco de memória alocada, chama a função de manipulador novo ou retorna NULL.Para obter uma descrição completa do comportamento de retorno, consulte a seção comentários.Para obter mais informações sobre como a nova função de manipulador é usada, consulte o calloc função.

Comentários

_calloc_dbgé uma versão de depuração do calloc função.Quando _ Debug não está definido, cada chamada para _calloc_dbg é reduzido a uma chamada para calloc.Ambos calloc e _calloc_dbg alocar num blocos de memória no heap de base, mas _calloc_dbg oferece vários recursos de depuração:

  • Buffers em ambos os lados da parte do bloco para testar se há vazamento de usuário.

  • Um parâmetro de tipo de bloco para controlar os tipos de alocação específica.

  • filename/linenumber informações para determinar a origem de solicitações de alocação.

_calloc_dbgaloca a cada bloco de memória com um pouco mais espaço que o solicitado size.O espaço adicional é usado pelo Gerenciador de heap do debug para vincular os blocos de memória de depuração e para fornecer o aplicativo com informações de cabeçalho de depuração e sobrescrever os buffers.Quando o bloco é alocado, a parte do usuário do bloco é preenchida com o valor 0xCD e cada um dos buffers de substituição são preenchidas com 0xFD.

_calloc_dbgdefine errno para ENOMEM se uma alocação de memória falhar; EINVALé retornado se a quantidade de memória necessária (incluindo a sobrecarga mencionada anteriormente) exceder _HEAP_MAXREQ.Para obter informações sobre este e outros códigos de erro, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

Para obter informações sobre como blocos de memória são alocados, inicializados e gerenciados na versão de depuração da pilha base, consulte Gerenciamento de memória e a pilha de depuração.Para obter informações sobre as diferenças entre chamando uma função de heap padrão em vez de sua versão de depuração em uma compilação de depuração de um aplicativo, consulte usando a depurar versão Versus a Base de versão.

Requisitos

Rotina

Cabeçalho necessário

_calloc_dbg

<crtdbg.h>

Para obter mais informações de compatibilidade, consulte compatibilidade na introdução.

Exemplo

// crt_callocd.c
/*
 * This program uses _calloc_dbg to allocate space for
 * 40 long integers. It initializes each element to zero.
 */
#include <stdio.h>
#include <malloc.h>
#include <crtdbg.h>

int main( void )
{
        long *bufferN, *bufferC;

        /* 
         * Call _calloc_dbg to include the filename and line number
         * of our allocation request in the header and also so we can
         * allocate CLIENT type blocks specifically
         */
        bufferN = (long *)_calloc_dbg( 40, sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
        bufferC = (long *)_calloc_dbg( 40, sizeof(long), _CLIENT_BLOCK, __FILE__, __LINE__ );
        if( bufferN != NULL && bufferC != NULL )
              printf( "Allocated memory successfully\n" );
        else
              printf( "Problem allocating memory\n" );

        /* 
         * _free_dbg must be called to free CLIENT type blocks
         */
        free( bufferN );
        _free_dbg( bufferC, _CLIENT_BLOCK );
}
  

Equivalência do .NET Framework

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

Consulte também

Referência

Rotinas de depuração

calloc

_malloc_dbg

DEBUG