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_errlist
und _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. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der 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