calloc

MALLOC(3)                 Manuel du programmeur Linux                MALLOC(3)



NOM
       malloc, calloc, free, realloc - Allocation et libération dynamiques de
       mémoire

SYNOPSIS
       #include <stdlib.h>

       void *calloc(size_t nmemb, size_t size);
       void *malloc(size_t size);
       void free(void *ptr);
       void *realloc(void *ptr, size_t size);

DESCRIPTION
       calloc() alloue la mémoire nécessaire pour un tableau de nmemb
       éléments, chacun d'eux représentant size octets, et renvoie un
       pointeur vers la mémoire allouée. Cette zone est remplie avec des
       zéros.

       malloc() alloue size octets, et renvoie un pointeur sur la mémoire
       allouée. Le contenu de la zone de mémoire n'est pas initialisé.

       free() libère l'espace mémoire pointé par ptr, qui a été obtenu
       lors d'un appel antérieur à malloc(), calloc() ou realloc(). Si le
       pointeur ptr n'a pas été obtenu par l'un de ces appels, ou s'il a
       déjà été libéré avec free(), le comportement est indéterminé.
       Si ptr est NULL, aucune tentative de libération n'a lieu.

       realloc() modifie la taille du bloc de mémoire pointé par ptr pour
       l'amener à une taille de size octets. realloc() conserve le contenu de
       la zone mémoire minimum entre la nouvelle et l'ancienne taille. Le
       contenu de la zone de mémoire nouvellement allouée n'est pas
       initialisé. Si ptr est NULL, l'appel de realloc() est équivalent Ã
       malloc(size). Si size vaut zéro, l'appel est équivalent à free(ptr).
       Si ptr n'est pas NULL, il doit avoir été obtenu par un appel
       antérieur à malloc(), calloc() ou realloc(). Si la zone pointée
       était déplacée, un free(ptr) est effectué.

VALEUR RENVOYÃE
       Pour calloc() et malloc(), la valeur renvoyée est un pointeur sur la
       mémoire allouée, qui est correctement alignée pour n'importe quel
       type de variable, ou NULL si la demande échoue.

       free() ne renvoie pas de valeur.

       realloc() renvoie un pointeur sur la mémoire nouvellement allouée,
       qui est correctement alignée pour n'importe quel type de variable, et
       qui peut être différent de ptr, ou NULL si la demande échoue. Si
       size vaut zéro, realloc renvoie NULL ou un pointeur acceptable pour
       free(). Si realloc() échoue, le bloc mémoire original reste intact,
       il n'est ni libéré ni déplacé.

CONFORMITÃ Ã
       C89, C99.

VOIR AUSSI
       brk(2), posix_memalign(3)

NOTES
       Le standard Unix98 nécessite que malloc(), calloc() et realloc()
       positionnent errno à ENOMEM en cas d'échec. La glibc suppose qu'il en
       est ainsi (et les versions glibc de ces routines le font). Si vous
       utilisez une implémentation personnelle de malloc qui ne positionne
       pas errno, certaines routines de bibliothèques peuvent échouer sans
       donner de raison dans errno.

       Lorsqu'un programme échoue durant un appel à malloc(), calloc(),
       realloc() ou free(), ceci est presque toujours le signe d'une
       corruption du tas. Ceci survient généralement en cas de débordement
       d'un bloc mémoire alloué, ou en libérant deux fois le même
       pointeur.

       Les versions récentes de la bibliothèque libc de Linux (postérieures
       à 5.4.23) et de la bibliothèque GNU libc 2.x incluent une
       implémentation de malloc() dont on peut configurer le comportement Ã
       l'aide de variables d'environnement. Quand la variable MALLOC_CHECK_
       existe, les appels à malloc() emploient une implémentation spéciale
       (moins efficace) mais plus tolérante à l'encontre des bogues simples,
       comme le double appel de free() avec le même argument, ou lors d'un
       débordement de tampon d'un seul octet (bogues de surpassement d'une
       unité, ou oubli d'un caractère nul final d'une chaîne). Il n'est
       toutefois pas possible de se protéger contre toutes les erreurs de ce
       type, et l'on risque de voir des fuites de mémoire se produire. Si la
       variable MALLOC_CHECK_ vaut zéro, toutes les corruptions du tas
       détectées sont ignorées silencieusement. Si elle vaut 1, un message
       de diagnostique est affiché sur stderr. Si elle vaut 2, la fonction
       abort() est appelée immédiatement. Ce comportement est
       particulièrement utile car un crash pourrait sinon se produire
       ultérieurement, et serait très difficile à diagnostiquer.

BOGUES
       Par défaut, Linux suit une stratégie d'allocation optimiste. Ceci
       signifie que lorsque malloc() renvoie une valeur non NULL, il n'y a
       aucune garantie que la mémoire soit véritablement disponible. C'est
       vraiment un bogue ennuyeux. Dans le cas où le système manque de
       mémoire, un ou plusieurs processus seront tués par l'infâme « OOM
       killer » (gestionnaire de mémoire) . Dans le cas où Linux est
       utilisé dans des circonstances où il n'est pas souhaitable de perdre
       soudainement des processus lancés aléatoirement, et si de plus la
       version du noyau est suffisamment récente, il est possible de
       désactiver ce comportement avec une commande comme
              # echo 2 > /proc/sys/vm/overcommit_memory
       Voir également les fichiers vm/overcommit-accounting et sysctl/vm.txt
       dans le répertoire de la documentation du noyau.

TRADUCTION
       Cette page de manuel a été traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006, et mise Ã
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian
       sont directement gérées par Florentin Duneau <fduneau@gmail.com> et
       l'équipe francophone de traduction de Debian.

       Veuillez signaler toute erreur de traduction en écrivant Ã
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».



GNU                              4 avril 1993                        MALLOC(3)