calloc

Ordnet ein Array im Arbeitsspeicher mit Elementen an, die auf 0 initialisiert sind.

Syntax

void *calloc(
   size_t number,
   size_t size
);

Parameter

number
Anzahl der Elemente.

size
Länge jedes Elements in Bytes.

Rückgabewert

calloc gibt einen Zeiger auf den zugewiesenen Speicherplatz zurück. Der speicherplatz, auf den der Rückgabewert verweist, wird entsprechend für die Speicherung eines beliebigen Objekttyps ausgerichtet. Um einen Zeiger auf einen anderen Typ als void zurückzugeben, verwenden Sie eine Typumwandlung für den Rückgabewert.

Hinweise

Die calloc-Funktion reserviert Speicherplatz für ein Array von number-Elementen, die jeweils die Länge size Bytes haben. Jedes Element wird auf 0 initialisiert.

calloc setzt errno auf ENOMEM, wenn eine Speicherbelegung fehlschlägt oder wenn der benötigte Speicherplatz größer ist als _HEAP_MAXREQ. Informationen zu diesem und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

Gibt in der Microsoft-Implementierung , wenn number oder size null ist, calloc einen Zeiger auf einen zugewiesenen Block mit nicht null Größe zurück. Ein Versuch, den zurückgegebenen Zeiger zu lesen oder zu schreiben, führt zu einem nicht definierten Verhalten.

calloc verwendet die C++ _set_new_mode -Funktion, um den neuen Handlermodus festzulegen. Der neue Handlermodus gibt an, ob bei einem Fehler calloc die neue Handlerroutine aufrufen soll, wie dies von _set_new_handler festgelegt ist. Ruft standardmäßig die neue Handlerroutine nicht auf, calloc wenn Speicher nicht zugewiesen werden kann. Sie können dieses Standardverhalten außer Kraft setzen, sodass beim calloc Zuweisen des Arbeitsspeichers die neue Handlerroutine auf die gleiche Weise aufgerufen wird wie der new Operator, wenn er aus demselben Grund fehlschlägt. Um den Standardwert zu überschreiben, rufen Sie

_set_new_mode(1);

frühzeitig in Ihrem Programm oder Verknüpfen mit NEWMODE.OBJ (siehe Linkoptionen).

Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, calloc wird sie aufgelöst._calloc_dbg Weitere Informationen dazu, wie der Heap während des Debuggingvorgangs verwaltet wird, finden Sie im CRT-Debug-Heap.

calloc ist markiert __declspec(noalias) und __declspec(restrict), was bedeutet, dass die Funktion garantiert nicht globale Variablen ändert, und dass der zurückgegebene Zeiger nicht aliast ist. Weitere Informationen finden Sie unter noalias und restrict.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Anforderungen

Routine Erforderlicher Header
calloc <stdlib.h> und <malloc.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

// 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

Siehe auch

Speicherzuweisung
free
malloc
realloc