Leçon 23 : calloc, realloc et les tableaux dynamiques
À la leçon précédente on a rencontré malloc — qui alloue un bloc mais y laisse des déchets. calloc(n, size) fait un pas de plus : elle alloue ET remet tous les octets à zéro. realloc(p, new_size) change la taille d'un bloc existant — en l'agrandissant ou en le réduisant — mais attention : elle peut
realloc est comme déménager vers un box de stockage plus grand : l'entreprise de déménagement peut transférer toutes tes affaires vers un nouveau box ailleurs et te donner une nouvelle clé. Ne jette jamais l'ancienne clé avant d'avoir la nouvelle en main — sinon, si le déménagement échoue, tu as aussi perdu l'ancien box.
- calloc(n, size)
- Alloue un bloc pour n éléments de size octets chacun — et remet aussi tous les octets à zéro.
- realloc(p, new_size)
- Change la taille du bloc existant. Les valeurs sont préservées, mais le bloc peut se déplacer vers une nouvelle adresse.
- pointeur temporaire (tmp)
- Le motif sûr : int *tmp = realloc(arr, ...); et seulement si tmp n'est pas NULL — arr = tmp;. Ainsi on ne perd pas le bloc d'origine en cas d'échec.
- capacité
- Combien d'éléments le bloc peut contenir. Dans un tableau dynamique, quand la capacité s'épuise — l'usage est de la doubler avec realloc.
- tableau dynamique
- Un tableau sur le tas dont la taille est fixée à l'exécution et peut grandir selon le besoin — contrairement à un tableau ordinaire de taille fixe.