Section courante

A propos

Section administrative du site

REALLOC

Réallouer
Langage C stdlib.h

Syntaxe

void *realloc(void *tampon,size_t taille);

Paramètres

Nom Description
tampon Ce paramètre permet d'indiquer le tampon contenant l'expression à réallouer.
taille Ce paramètre permet d'indiquer la nouvelle taille du tampon

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 réaffecté, pouvant être soit le même que le pointeur spécifié par le paramètre tampon ou un nouvel emplacement. Le type de ce pointeur est void *, mais peut être converti en type de pointeur de données souhaité avec déréférencement.

Description

Cette fonction permet de changer la taille d'un bloc de mémoire dynamique. Pour y arriver, la fonction realloc pourra déplacer le bloc de mémoire vers un nouvel emplacement (dont l'adresse est retournée par cette fonction). Dans les anciens compilateurs, il tentera de vérifier s'il y a de la place en mémoire immédiatement après le bloc de mémoire dynamique alloué, et s'il y en a, alors il agrandira le bloc de mémoire, sinon la fonction sera un échec et il retournera la valeur NULL.

Algorithme

MODULE REALLOC(ptr, size)
   SI ptr est NULL ALORS
      * Si ptr est NULL, effectue une allocation standard
      RETOURNE malloc(size)
   FIN SI

   SI size = 0 ALORS
      * Si la taille demandée est 0, libère la mémoire et retourne NULL
      free(ptr)
      RETOURNE NULL
   FIN SI

   * Tenter d'étendre ou de réallouer la mémoire
   new_block ← allocate_new_memory(size)      * Allouer un nouveau bloc de mémoire de la taille souhaitée

   SI new_block est NULL ALORS
      RETOURNE NULL      * En cas d'échec, retourner NULL
   FIN SI

   * Copier les données de l'ancien bloc vers le nouveau
   min_size ← min(current_size_of_ptr, size)
   copy_memory(ptr, new_block, min_size)

   * Libérer l'ancien bloc de mémoire
   free(ptr)

   * Retourner le pointeur vers le nouveau bloc
   RETOURNE new_block

Remarques

Exemple

Voici quelques exemples typiques de l'utilisation de cette fonction :

  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("Avant realloc : Valeur p[15] = %i\n",p[15]);
  13.         p = (int*) realloc (p, 21 * sizeof(int));
  14.         if(NULL == p) {
  15.              printf("Impossible de reallouer de la memoire dynamiquement !\n");
  16.         } else {
  17.              printf("Avant realloc : Valeur p[15] = %i\n",p[15]);
  18.              free(p);
  19.         }
  20.     } else {
  21.         printf("Impossible d'allouer de la memoire dynamiquement !\n");
  22.     }
  23.     return 0;
  24. }

on obtiendra le résultat suivant :

Avant realloc : Valeur p[15] = 850
Avant realloc : 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 - malloc
Langage de programmation - C++ - Référence de procédures et fonctions - realloc
Langage de programmation - C pour Linux - Référence de procédures et fonctions - realloc

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 209.

Dernière mise à jour : Mardi, le 5 décembre 2017