Condividi tramite


_calloc_dbg

Alloca una serie di blocchi di memoria nell'heap con spazio aggiuntivo per un'intestazione di debug e sovrascrivono i buffer (versione di debug solo).

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

Parametri

  • num
    Numero richiesto dei blocchi di memoria.

  • size
    Dimensione richiesta di ciascun blocco di memoria (byte).

  • blockType
    tipo richiesto di blocco di memoria: _CLIENT_BLOCK o _NORMAL_BLOCK.

    Per informazioni sui tipi di blocchi di allocazione e come vengono utilizzati, vedere Tipi di blocchi sull'heap di debug.

  • filename
    Puntatore al nome del file di origine che ha richiesto l'operazione di allocazione o NULL.

  • linenumber
    Numero di riga nel file di origine in cui l'operazione di allocazione è stata richiesta o NULL.

filename e linenumber i parametri sono disponibili solo quando _calloc_dbg è stato chiamato in modo esplicito o _CRTDBG_MAP_ALLOC la costante del preprocessore è stata definita.

Valore restituito

Al termine, questa funzione restituisce un puntatore all'utente dell'ultimo blocco di memoria allocata, chiama la nuova funzione di gestione, o restituisce NULL.Per una descrizione completa del comportamento di ritorno, vedere la sezione relativa alle osservazioni.Per ulteriori informazioni su come la nuova funzione di gestione viene utilizzata, vedere calloc funzione.

Note

_calloc_dbg è una versione di debug di calloc funzione.quando _DEBUG non è definita, ogni chiamata a _calloc_dbg è stato ridotto a una chiamata a calloc.entrambi calloc e _calloc_dbg allocare num blocchi di memoria nell'heap di base, ma _calloc_dbg offre numerose funzionalità di debug:

  • Buffer presenti da entrambi i lati della parte dell'utente di blocco da verifica delle perdite.

  • Un parametro di tipo blocco per tenere traccia dei tipi specifici di allocazione.

  • filenameolinenumber informazioni per determinare l'origine delle richieste di allocazione.

_calloc_dbg alloca ciascun blocco di memoria con leggermente più spazio rispetto richiesto size.Lo spazio aggiuntivo viene utilizzato dall'amministratore dell'heap di debug per collegare i blocchi di memoria di debug e per fornire l'applicazione con informazioni di intestazione di debug e sovrascrivere i buffer.Quando il blocco è allocato, la parte del blocco viene riempita con valore 0xCD e ciascuno dei buffer di sovrascrivere viene inserito il valore 0xFD.

_calloc_dbg set errno in ENOMEM se allocazione di memoria non riesce, EINVAL viene restituito se la quantità di memoria necessaria (sovraccarico inclusi accennato in precedenza) supera _HEAP_MAXREQ.Per informazioni su questo e altri codici di errore, vedere errno, _doserrno, _sys_errlist e _sys_nerr.

Per informazioni su come i blocchi di memoria vengono allocati, inizializzati e vengono gestiti nella versione di debug dell'heap di base, vedere Gestione della memoria e heap di debug.Per informazioni sulle differenze tra chiamare una funzione standard dell'heap rispetto alla versione di debug in una build di debug di un'applicazione, vedere Utilizzando la versione di debug nella versione di base.

Requisiti

routine

Intestazione di associazione

_calloc_dbg

<crtdbg.h>

Per ulteriori informazioni sulla compatibilità, vedere compatibilità nell'introduzione.

Esempio

// 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 );
}
  

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.

Vedere anche

Riferimenti

Procedura di debug

calloc

differenze

_DEBUG