Fonction realloc() dans la bibliothèque C : comment l'utiliser ? Syntaxe et exemple
Qu'est-ce que realloc() ?
réalloc() est une fonction de la bibliothèque C permettant d'ajouter plus de taille de mémoire aux blocs de mémoire déjà alloués. Le but de la réallocation en C est d'étendre les blocs de mémoire actuels tout en laissant le contenu d'origine tel quel. La fonction realloc() permet de réduire la taille de la mémoire précédemment allouée par les fonctions malloc ou calloc. realloc signifie réallocation de mémoire.
Syntaxe pour la réallocation en C
ptr = realloc (ptr,newsize);
L'instruction ci-dessus alloue un nouvel espace mémoire avec une taille spécifiée dans la variable newsize. Après avoir exécuté le fonction, le pointeur sera renvoyé sur le premier octet du bloc mémoire. La nouvelle taille peut être plus grande ou plus petite que la mémoire précédente. Nous ne pouvons pas être sûrs que le bloc nouvellement alloué pointera vers le même emplacement que celui du bloc mémoire précédent. La fonction de réallocation en C copiera toutes les données précédentes dans la nouvelle région. Il garantit que les données resteront en sécurité.
Par exemple :
#include <stdio.h> int main () { char *ptr; ptr = (char *) malloc(10); strcpy(ptr, "Programming"); printf(" %s, Address = %u\n", ptr, ptr); ptr = (char *) realloc(ptr, 20); //ptr is reallocated with new size strcat(ptr, " In 'C'"); printf(" %s, Address = %u\n", ptr, ptr); free(ptr); return 0; }
Comment utiliser realloc()
Le programme ci-dessous en C montre comment utiliser realloc en C pour réallouer la mémoire.
#include <stdio.h> #include <stdlib.h> int main() { int i, * ptr, sum = 0; ptr = malloc(100); if (ptr == NULL) { printf("Error! memory not allocated."); exit(0); } ptr = realloc(ptr,500); if(ptr != NULL) printf("Memory created successfully\n"); return 0; }
Résultat de la réallocation dans l'exemple C :
Memory created successfully
Chaque fois que la réallocation aboutit à une opération infructueuse, elle renvoie un pointeur nul, et les données précédentes sont également libérées.