Provided by: manpages-fr_1.67.0-1_all bug

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().

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É

       ANSI-C

VOIR AUSSI

       brk(2), posix_memalign(3)

NOTES

       Le  standard  Unix98  réclame  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 cette routine 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 se plante durant un appel à malloc(),  calloc()  ou
       realloc(),  ceci  est presque toujours le signe d’une corruption du tas
       (zone de mémoire dans laquelle sont allouées les variables dynamiques).
       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 C de Linux (libc  postérieures
       à  5.4.23)  et 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 un débordement de buffer 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  pallier
       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  cette  variable  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 craignos.  Dans  le  cas  où  le  système  manque  de
       mémoire,   un   ou   plusieurs   processus  seront  tués  par  l’infâme
       exterminateur de gestion 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,  on  peut désactiver ce
       comportement en utilisant une commande du style :
              # 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

       Christophe Blaess, 1996-2003.