Section courante

A propos

Section administrative du site

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

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 :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int * p = malloc(20 * sizeof(int));
  7.     p[0] = 15;
  8.     p[1] = 16;
  9.     p[2] = 17;
  10.     return 0;
  11. }

Par contre, dans l'exemple suivant, vous vérifiez que la mémoire est disponible avant de la modifier :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int * p = malloc(20 * sizeof(int));
  7.     if(NULL != p) {
  8.         p[0] = 15;
  9.         p[1] = 16;
  10.         p[2] = 17;
  11.     }
  12.     return 0;
  13. }

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 !
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int * p = malloc(20 * sizeof(int));
  7.     if(NULL != p) {
  8.         int I;
  9.         for(I = 0; I < 20; I++) {
  10.             p[I] = 1000-(I * 10);
  11.         }
  12.         printf("Valeur p[15] = %i\n",p[15]);
  13.         free(p);
  14.     } else {
  15.         printf("Impossible d'allouer de la mémoire dynamiquement !\n");
  16.     }
  17.     return 0;
  18. }

on obtiendra le résultat suivant :

Valeur p[15] = 850

Voir é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.

Dernière mise à jour : Mardi, le 28 juillet 2015