calloc
Alloue un tableau dans la mémoire avec des éléments initialisés à 0.
Syntaxe
void *calloc(
size_t number,
size_t size
);
Paramètres
number
Nombre d'éléments.
size
Longueur en octets de chaque élément.
Valeur retournée
calloc
retourne un pointeur désignant l’espace alloué. L’espace de stockage pointé par la valeur de retour est parfaitement aligné pour le stockage de n’importe quel type d’objet. Pour obtenir un pointeur vers un autre type que void
, utilisez un cast de type sur la valeur de retour.
Notes
La fonction calloc
alloue de l’espace de stockage pour un tableau de number
éléments occupant chacun size
octets. Chaque élément est initialisé à 0.
calloc
définit errno
sur ENOMEM
si une allocation de mémoire échoue ou que la quantité de mémoire demandée dépasse _HEAP_MAXREQ
. Pour plus d’informations sur ce code et d’autres codes d’erreur, consultez , , _sys_errlist
_doserrno
et _sys_nerr
.errno
Dans l’implémentation De Microsoft, le cas number
échéant size
, calloc
retourne un pointeur vers un bloc alloué de taille différente de zéro. Une tentative de lecture ou d’écriture via le pointeur retourné entraîne un comportement non défini.
calloc
utilise la fonction C++ _set_new_mode
pour définir le nouveau mode de gestionnaire. Le nouveau mode de gestionnaire indique si, en cas d'échec, calloc
doit appeler la nouvelle routine de gestionnaire, telle qu'elle est définie par _set_new_handler
. Par défaut, calloc
n’appelle pas la nouvelle routine de gestionnaire en cas d’échec de l’allocation de mémoire. Vous pouvez remplacer ce comportement par défaut afin que, lorsqu’il calloc
ne parvient pas à allouer de la mémoire, il appelle la nouvelle routine de gestionnaire de la même façon que l’opérateur new
lorsqu’il échoue pour la même raison. Pour remplacer la valeur par défaut, appelez
_set_new_mode(1);
début dans votre programme ou lien avec NEWMODE.OBJ
(voir options de lien).
Lorsque l’application est liée à une version de débogage des bibliothèques runtime C, calloc
la résolution est _calloc_dbg
. Pour plus d’informations sur la gestion du tas pendant le processus de débogage, consultez le tas de débogage CRT.
calloc
est marqué __declspec(noalias)
et __declspec(restrict)
, ce qui signifie que la fonction est garantie de ne pas modifier les variables globales et que le pointeur retourné n’est pas alias. Pour plus d’informations, consultez noalias
et restrict
.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Spécifications
Routine | En-tête requis |
---|---|
calloc |
<stdlib.h> et <malloc.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// 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