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_errliste _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

Vedi anche

Allocazione di memoria
free
malloc
realloc