Utilisation de realloc() en C : Syntaxe, bonnes pratiques et exemple
Qu'est-ce que realloc() ?
realloc() est une fonction de la bibliothèque standard C qui redimensionne un bloc mémoire existant. Elle l'agrandit ou le rétrécit tout en préservant son contenu. Cela rend la gestion de la mémoire dynamique plus efficace, surtout quand la taille requise change pendant l'exécution.
Syntaxe
ptr = realloc(ptr, newSize);
Ici, ptr pointe vers un bloc précédemment alloué, et newSize est la taille désirée en octets. Après l'appel, ptr pointera vers le premier octet du nouveau bloc. La fonction copie les données originales vers le nouvel emplacement et libère l'ancien bloc si la réallocation réussit.
Points clés à retenir
- Quand
realloc()réussit, le pointeur retourné peut être le même que l'original ou une nouvelle adresse. - Si la fonction échoue, elle retourne
NULLet laisse le bloc original intact. - Assignez toujours le résultat à un pointeur temporaire pour éviter de perdre l'adresse originale en cas d'échec.
- Après une réallocation réussie, libérez le pointeur une seule fois.
Exemple – Redimensionnement d'un tampon de chaîne
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *buf = malloc(10);
if (!buf) {
perror("malloc");
return EXIT_FAILURE;
}
strcpy(buf, "Programming");
printf("%s\n", buf);
char *tmp = realloc(buf, 20); // augmente la taille du tampon
if (!tmp) {
free(buf); // bloc original toujours valide
perror("realloc");
return EXIT_FAILURE;
}
buf = tmp;
strcat(buf, " in C");
printf("%s\n", buf);
free(buf);
return EXIT_SUCCESS;
}
Exemple – Allocation et redimensionnement d'un tableau d'entiers
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *arr = malloc(10 * sizeof(int));
if (!arr) {
perror("malloc");
return EXIT_FAILURE;
}
/* ... utilisation du tableau ... */
int *tmp = realloc(arr, 50 * sizeof(int));
if (!tmp) {
free(arr);
perror("realloc");
return EXIT_FAILURE;
}
arr = tmp;
printf("Array resized successfully\n");
free(arr);
return EXIT_SUCCESS;
}
Conseils pratiques
- Préférez
size_tpour les arguments de taille afin d'éviter les bugs liés aux signes. - Lors du rétrécissement d'un bloc, sachez que les données au-delà de la nouvelle taille sont perdues.
- Vérifiez toujours la valeur de retour avant d'utiliser le pointeur.
- Utilisez
free()exactement une fois pour chaque allocation réussie.
Langue C
- Comment le molybdène façonne l'industrie moderne : usages, avantages et dynamiques d'approvisionnement
- Exploiter Azure DevOps : Pratiques Prouvées pour une Livraison Accélérée
- Transformez votre puzzle fini en chef-d'œuvre intemporel avec la résine époxy
- calloc() en C : Allocation mémoire initialisée à zéro et exemple pratique
- Maîtriser la fonction free() en C : Guide pratique et exemple
- Guide essentiel : Quand et comment utiliser un extincteur en toute sécurité
- Maîtriser les pistolets à peinture : Guide professionnel pour une couverture uniforme et sûre
- Utiliser une thermistance facilement : Guide étape par étape Arduino
- Maîtriser les techniques de la rectifieuse d'outils : guide pratique