Retour au cours

Allocation dynamique de mémoire (DMA) : malloc() et calloc()

Langage C : de Zéro à Héros - Le Guide Complet pour Débutants

Leçon 38 : Allocation dynamique de mémoire (DMA) : malloc() et calloc()

Les variables normales sont allouées sur la pile (taille fixe). La mémoire dynamique est allouée sur le Tas (Heap) au moment de l'exécution, ce qui permet de gérer la taille de la mémoire en fonction des besoins de l'utilisateur. Nous utilisons la bibliothèque <stdlib.h> pour la DMA.

1. malloc() (Memory Allocation)

Alloue un bloc de mémoire de la taille spécifiée (en octets) et renvoie un pointeur void * vers le début du bloc. Si l'allocation échoue, elle renvoie NULL.

Syntaxe : (type *) malloc(taille_en_octets);

c #include <stdlib.h>

// Alloue de l'espace pour 10 entiers int *ptr_arr = (int *) malloc(10 * sizeof(int));

if (ptr_arr == NULL) { // Gérer l'erreur }

// Le bloc de mémoire alloué contient des valeurs résiduelles (garbage values).

2. calloc() (Contiguous Allocation)

Alloue de la mémoire pour un tableau d'éléments. Elle initialise tous les octets de l'espace alloué à zéro.

Syntaxe : (type *) calloc(nombre_d_elements, taille_de_chaque_element);

c // Alloue de l'espace pour 10 entiers et les initialise à 0 int *ptr_arr_zero = (int *) calloc(10, sizeof(int));

Différence clé : malloc alloue de la mémoire brute (données résiduelles) ; calloc alloue de la mémoire et la met à zéro.