calloc
Alloca una matrice in memoria con elementi inizializzati a 0.
Sintassi
void *calloc(
size_t number,
size_t size
);
Parametri
number
Numero di elementi.
size
Lunghezza in byte di ogni elemento.
Valore restituito
calloc
restituisce un puntatore allo spazio allocato. Lo spazio di archiviazione a cui punta il valore restituito è allineato in modo adeguato per l'archiviazione di qualsiasi tipo di oggetto. Per ottenere un puntatore a un tipo diverso da void
, usare un cast del tipo sul valore restituito.
Osservazioni:
La funzione calloc
alloca spazio di archiviazione per una matrice di elementi number
, ognuno lungo size
byte. Ogni elemento viene inizializzato su 0.
calloc
imposta errno
su ENOMEM
se un'allocazione di memoria ha esito negativo o se la quantità di memoria richiesta supera _HEAP_MAXREQ
. Per informazioni su questo e altri codici di errore, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Nell'implementazione di Microsoft, se number
o size
è zero, calloc
restituisce un puntatore a un blocco allocato di dimensioni diverse da zero. Un tentativo di lettura o scrittura tramite il puntatore restituito comporta un comportamento non definito.
calloc
usa la funzione C++ _set_new_mode
per impostare la nuova modalità del gestore. La nuova modalità del gestore indica se, in caso di errore, calloc
deve chiamare la routine del nuovo gestore come impostato da _set_new_handler
. Per impostazione predefinita, calloc
non chiama la nuova routine del gestore in caso di errore di allocazione della memoria. È possibile eseguire l'override di questo comportamento predefinito in modo che, quando calloc
non riesce ad allocare memoria, chiama la nuova routine del gestore nello stesso modo in cui l'operatore new
esegue quando ha esito negativo per lo stesso motivo. Per eseguire l'override del comportamento predefinito, chiamare
_set_new_mode(1);
all'inizio del programma o collegarsi a NEWMODE.OBJ
(vedere Opzioni di collegamento).
Quando l'applicazione è collegata a una versione di debug delle librerie di runtime C, calloc
viene risolto in _calloc_dbg
. Per altre informazioni sulla gestione dell'heap durante il processo di debug, vedere Heap di debug CRT.
calloc
è contrassegnato __declspec(noalias)
e __declspec(restrict)
, il che significa che la funzione non può modificare le variabili globali e che il puntatore restituito non è aliasato. Per altre informazioni, vedere noalias
e restrict
.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
calloc |
<stdlib.h> e <malloc.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_calloc.c
// This program uses calloc to allocate space for
// 40 long integers. It initializes each element to zero.
#include <stdio.h>
#include <malloc.h>
int main( void )
{
long *buffer;
buffer = (long *)calloc( 40, sizeof( long ) );
if( buffer != NULL )
printf( "Allocated 40 long integers\n" );
else
printf( "Can't allocate memory\n" );
free( buffer );
}
Allocated 40 long integers