realloc() : La fonction realloc() aggrandit un bloc mémoire alloué.
Prototype:
void * realloc(void * adr_bloc, size_t taille);
dans: <stdlib.h> ou <malloc.h> (UNIX) ou <alloc.h> (DOS)
Description:
realloc() règle à 'taille' octets la dimension du bloc alloué d'adresse adr_bloc.
Il se peut qu'un nouveau bloc de 'taiile' octets soit alloué; dans ce cas:
- l'adresse du nouveau bloc est renvoyée
- si adr_bloc!=NULL, le contenu de l'ancien bloc est recopié dans le nouveau bloc
- si ad_bloc!=NULL, l'ancien bloc est libéré.
Utilisation courante: Tableaux dynamiques.
Valeur renvoyée:
- Si la taille de mémoire demandée est disponible, realloc() retourne l'adresse d'un bloc; la valeur retournée peut être égale à adr_bloc, ou peut être différente de adr_bloc;
- Sinon (généralement le cas où il ne reste plus de mémoire displonible), realloc() retourne NULL.
- Si on fournit a realloc une taille égale à 0, realloc() renvoie NULL.
Portabilité:
Voir aussi:
Exemple:
/*
Un prénom saisi au clavier est mémorisé dans une zone dynamique.
Puis cette zone est aggrandie pour saisir un nom.
*/
#include
#include
#include
void main(void) {
char *chaine;
int tp, tn;
printf("De combien de lettres votre prénom est il formé ? ");
scanf("%d", &tp);
/* Allocation mémoire pour une chaîne de tp caractères. */
chaine=(char *)malloc(tp+1);
if (chaine==NULL) {
printf("Erreur d'allocation mémoire !!!");
exit(1);
}
printf("Quel est votre prénom ? ");
scanf( "%s", chaine);
printf("De combien de lettres votre nom est il formé ? ");
scanf("%d", &tn);
/* Nouvelle allocation pour une chaine de 1+tn caractères en plus. */
chaine=(char *)realloc(chaine, tp+1+tn+1);
if ( chaine==NULL ) {
printf("Erreur d'allocation mémoire !!!");
exit(2);
}
strcat( chaine, " "); /* séparateur entre prénom et nom */
printf("Quel est ce nom ? ");
scanf( "%s", chaine+strlen(chaine));
printf("Bonjour %s\n", chaine); /* Affichage de la chaîne */
/* Libération de la mémoire allouée à la chaîne de caractères */
if (chaine) free(chaine);
}