MALLOC |
Allocation mémoire |
---|---|
Langage C | stdlib.h |
Syntaxe
void *malloc(size_t n); |
Paramètres
Nom | Description |
---|---|
n | Ce paramètre permet d'indiquer la quantité de mémoire en octets |
Retour
Valeur | Description |
---|---|
NULL | Cette valeur est retourné si la taille spécifié par le paramètre taille est 0 ou qu'il n'y a plus d'espace de disponible dans la mémoire dynamique. |
pointeur | Ces valeurs permet d'indiquer le nouveau bloc de mémoire dynamique affecté. |
Description
Cette fonction permet une allocation de mémoire dynamique de «n» octets.
Algorithme
MODULE MALLOC(size) * Vérifie si la taille demandée est valide SI size ≤ 0 ALORS * Retourne NULL si la taille demandée est nulle ou négative RETOURNE NULL FIN SI * Trouver un bloc de mémoire libre de la taille demandée block ← search_free_memory_block(size) * Si l'allocation échoue SI block est NULL ALORS * Retourne NULL si la mémoire n'a pas pu être allouée RETOURNE NULL FIN SI * Marquer le bloc comme utilisé mark_as_used(block) * Retourner le pointeur vers le début du bloc alloué RETOURNE block |
Remarques
- Avant de faire des modifications de la mémoire dynamique alloués, vous devez vous assurez vous-même que la mémoire dynamique est disponible. Car même si vous demandez de la mémoire, il n'est pas garantie que vous aurez que ce que vous demandez. Ainsi, assurez-vous que le pointeur retourné par cette fonction ne corresponde pas à la valeur NULL, car sinon vous aurez des problèmes de corruption de mémoire.
- La mémoire que vous avez attribué avec cette fonction est disponible jusqu'à la fin de l'exécution du programme à moins que vous utilisiez la fonction free pour libérer cette mémoire.
- Assurez-vous de libérer la mémoire dès que vous avez plus besoin, car dans l'éventualité contraire, et sachant que bien d'autres fonctions dans un système informatique utilisent de la mémoire de façon occasionnelle, vous risquez de ne plus avoir de mémoire disponible et de vous retrouvez un message d'erreur comme ceci :
- La fonction malloc est utilisée pour allouer de l'espace en mémoire lors de l'exécution du programme.
- La fonction malloc n'initialise pas la mémoire allouée lors de l'exécution. Elle porte donc des valeurs imprévisible.
- La fonction malloc renvoie un pointeur NULL si elle n'a pas pu allouer la quantité de mémoire demandée.
Not Enough Memory |
Bonnes pratiques
Lorsque vous initialisez une variable, il est très important de vous assurez que vous avez bien la mémoire de disponible avant d'effectuer la mémoire dynamique. Ainsi, voici un exemple typique d'une très mauvaise pratique de programmation :
Par contre, dans l'exemple suivant, vous vérifiez que la mémoire est disponible avant de la modifier :
De cette manière, vous vous assurez que vous n'aurez pas de corruption de mémoire en changeant la valeur d'un bloc de mémoire et votre programme ne se mettre pas en planter un peu plus loin pour une raison obscure.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
on obtiendra le résultat suivant :
Valeur p[15] = 850Voir également
Langage de programmation - C - Allocation de mémoire
Langage de programmation - C - Référence de procédures et fonctions - calloc
Langage de programmation - C - Référence de procédures et fonctions - free
Langage de programmation - C - Référence de procédures et fonctions - realloc
Langage de programmation - C++ - Référence de procédures et fonctions - malloc
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 169.