malloc | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
#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 | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
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é. Si nmemb ou size vaut 0, malloc() renvoie soit NULL, soit une valeur de pointeur unique qui pourra être passé ultérieurement avec succés à free().
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 est équivalent à malloc(size), pour toutes les valeurs de size. Si size vaut zéro, et ptr n'est pas NULL, 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 | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
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É | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
NOTES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Le standard Unix98 réclame que malloc(), calloc() et realloc() remplissent errno avec 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 définit 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(), realloc() ou free(), 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 glibc 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 tampon d'un seul octet (bogues de surpassement d'une unité, ou oubli d'un octet 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(3) est appelée immédiatement. Si cette variable vaut 3, un message de diagnostique est affiché sur stderr et le programme abandonne. L'utilisation d'une valeur MALLOC_CHECK_ non nulle est particulièrement utile car un crash pourrait sinon se produire ultérieurement, et serait très difficile à diagnostiquer.
BOGUES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
# echo 2 > /proc/sys/vm/overcommit_memoryVoir également les fichiers vm/overcommit-accounting et sysctl/vm.txt dans le répertoire de la documentation du noyau.
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 4 novembre 1996 et révisée le 6 juin 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 malloc ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |