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