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
       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 si 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 à mal­
       loc(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 poin­
       teur 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, ou si size vaut zéro. Si real­
       loc() échoue, le bloc mémoire original  reste  intact,  il
       n'est ni libéré ni déplacé.



GNU                        9 Avril 1999                         1





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


CONFORMITÉ
       ANSI-C

VOIR AUSSI
       brk(2)

NOTES
       Le  standard  Unix98  réclame  que  malloc(), calloc(), et
       realloc() positionne 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émenta­
       tion  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  con­
       figurer  le  comportement à l'aide de variables d'environ­
       nement.   Quand  la  variable  MALLOC_CHECK_  existe,  les
       appels  à  malloc() emploient une implémentation spéciale,
       moins efficace mais plus tolérante à l'encontre  des  bugs
       simples comme le double appel de free() avec le même argu­
       ment, ou un débordement de buffer d'un seul octet (bugs 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 corrup­
       tions  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   partic­
       ulièrement  utile  car un crash pourrait sinon se produire
       ultérieurement, et serait très difficile à  diagnostiquer.


TRADUCTION
       Christophe Blaess, 1997.










GNU                        9 Avril 1999                         2