Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Alloca blocchi di memoria nell'heap con spazio aggiuntivo per un'intestazione di debug e buffer di sovrascrittura (solo versione di debug).
Sintassi
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parametri
number
Numero di blocchi di memoria richiesto.
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 sul modo in cui vengono usati, vedere Tipi di blocchi nell'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 è stata richiesta l'operazione di allocazione o NULL.
I filename parametri e linenumber sono disponibili solo quando _calloc_dbg è stato chiamato in modo esplicito o la costante del _CRTDBG_MAP_ALLOC preprocessore è stata definita.
Valore restituito
Al termine, questa funzione restituisce un puntatore alla porzione utente dell'ultimo blocco di memoria allocato, chiama la nuova funzione di gestione o restituisce NULL. Per una descrizione completa del comportamento di restituzione, vedere la sezione Note. Per altre informazioni sull'uso della nuova funzione del gestore, vedere la calloc funzione .
Osservazioni:
_calloc_dbg è una versione di debug della calloc funzione. Quando _DEBUG non è definito, ogni chiamata a _calloc_dbg viene ridotta a una chiamata a calloc. Sia calloc che _calloc_dbg allocano blocchi di memoria number nell'heap di base, ma _calloc_dbg offre diverse funzionalità di debug:
Buffer presenti su entrambi i lati della porzione utente del blocco in cui verificare la presenza di perdite.
Un parametro di tipo di blocco per tenere traccia di tipi specifici di allocazione.
filename/linenumberinformazioni per determinare l'origine delle richieste di allocazione.
_calloc_dbg alloca ogni blocco di memoria con una quantità di spazio leggermente superiore a quella richiesta, ovvero size. Lo spazio aggiuntivo viene usato dal gestore dell'heap di debug per collegare i blocchi di memoria di debug e per fornire all'applicazione informazioni sull'intestazione di debug e buffer di sovrascrittura. Quando il blocco viene allocato, la parte utente del blocco viene riempita con il valore 0xCD e ognuno dei buffer di sovrascrittura viene riempito con 0xFD.
_calloc_dbg imposta errno su ENOMEM se fallisce un'allocazione di memoria; EINVAL viene restituito se la quantità di memoria richiesta (incluso l'overhead menzionato precedentemente) supera _HEAP_MAXREQ. Per informazioni su questo e altri codici di errore, vedere errno, _doserrno, _sys_errliste _sys_nerr.
Per informazioni sulla modalità di allocazione, inizializzazione e gestione dei blocchi di memoria nella versione di debug dell'heap di base, vedere Dettagli dell'heap di debug CRT. Per informazioni sulle differenze tra la chiamata di una funzione heap standard e la versione di debug, vedere Eseguire il debug delle versioni delle funzioni di allocazione dell'heap.
Requisiti
| Ciclo | Intestazione obbligatoria |
|---|---|
_calloc_dbg |
<crtdbg.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
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 );
}
Allocated memory successfully