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
- Vous devez préalablement avoir allouer un bloc de mémoire que vous voulez indiquer à cette fonction pour que la fonction realloc réagisse correctement sur n'importe quel compilateur C. Dans le cas où le paramètre tampon est un pointeur NULL, la fonction se comporte comme la fonction malloc dans de nombreux compilateurs, en associant un nouveau bloc de taille octets et en renvoyant un pointeur au début du bloc de mémoire.
- Le contenu du bloc de mémoire est conservé jusqu'à l'emplacement de la plus petite des tailles nouvelles et anciennes spécifié, même si le bloc est déplacé vers un nouvel emplacement de mémoire. Si la nouvelle taille spécifié est plus grande que l'ancienne taille, la partie nouvellement allouée demeura indéterminée.
- Le comportement pour attribué de la mémoire dynamique varie énormément en fonction du compilateur et du système d'exploitation, il est donc préférable de consulter la documentation de la marque du compilateur C pour obtenir le comportement exacte.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- int * p = malloc(20 * sizeof(int));
- if(NULL != p) {
- int I;
- for(I = 0; I < 20; I++) {
- p[I] = 1000-(I * 10);
- }
- printf("Avant realloc : Valeur p[15] = %i\n",p[15]);
- p = (int*) realloc (p, 21 * sizeof(int));
- if(NULL == p) {
- printf("Impossible de reallouer de la memoire dynamiquement !\n");
- } else {
- printf("Avant realloc : Valeur p[15] = %i\n",p[15]);
- free(p);
- }
- } else {
- printf("Impossible d'allouer de la memoire dynamiquement !\n");
- }
- return 0;
- }
on obtiendra le résultat suivant :
Avant realloc : Valeur p[15] = 850Avant 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.