Menu
Coddy logo textTech

Allocation dynamique - malloc()

Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 32 sur 63.

Maintenant, vous allez découvrir malloc(), la fonction principale pour demander de la mémoire au tas (heap) pendant l'exécution du programme. La fonction malloc() signifie « memory allocation » et vous permet d'allouer dynamiquement de la mémoire quand vous en avez besoin, plutôt que de déclarer des variables de taille fixe au moment de la compilation.

La fonction malloc() prend un argument : le nombre d'octets que vous souhaitez allouer. Elle retourne un pointeur void vers le bloc de mémoire alloué, ou NULL si l'allocation échoue. Puisqu'elle retourne un pointeur void, vous pouvez l'assigner directement à un pointeur typé ; le transtypage (casting) est optionnel en C (contrairement au C++, qui l'exige).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Allouer de la mémoire pour un entier
// ptr pointe maintenant vers un emplacement mémoire pouvant contenir un entier

L'avantage principal de malloc() est la flexibilité - vous pouvez demander exactement la quantité de mémoire dont vous avez besoin au moment de l'exécution, et cette mémoire reste disponible jusqu'à ce que vous la libériez explicitement. C'est particulièrement utile lorsque vous ne savez pas de quelle quantité de mémoire vous aurez besoin avant que votre programme ne soit en cours d'exécution.

N'oubliez pas d'inclure <stdlib.h> pour utiliser malloc(), le transtypage du pointeur void retourné est optionnel en C, car il est automatiquement converti vers le type auquel vous l'assignez.

challenge icon

Défi

Facile

Écrivez un programme C qui démontre l'allocation dynamique de mémoire en utilisant malloc() pour créer et manipuler un seul entier sur le tas (heap). Votre programme doit :

  1. Utiliser malloc() pour allouer dynamiquement de la mémoire pour un entier
  2. Convertir (cast) le pointeur void retourné en un pointeur d'entier
  3. Lire une valeur entière à partir de l'entrée utilisateur
  4. Stocker la valeur saisie dans la mémoire allouée dynamiquement en utilisant l'opérateur de déréférencement
  5. Afficher la valeur stockée au format : Stored value: [value]
  6. Calculer et stocker le carré de la valeur au même emplacement mémoire
  7. Afficher la valeur au carré au format : Squared value: [value]

N'oubliez pas d'inclure l'en-tête <stdlib.h> pour utiliser malloc(). Votre programme doit démontrer le flux de travail de base de l'allocation dynamique de mémoire : demander de la mémoire au tas, l'utiliser pour stocker et manipuler des données, et travailler avec la mémoire allouée via des opérations sur les pointeurs.

Par exemple, si l'utilisateur saisit 7, votre sortie devrait être :

Stored value: 7
Squared value: 49

Ce défi vous présente le concept fondamental de l'allocation dynamique de mémoire, où la mémoire est demandée au moment de l'exécution plutôt que d'être fixée au moment de la compilation, offrant ainsi à vos programmes une plus grande flexibilité dans l'utilisation de la mémoire.

Essayez vous-même

#include <stdio.h>
#include <stdlib.h>

int main() {
    // Lire l'entrée
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Écrivez votre code ci-dessous
    // 1. Utilisez malloc() pour allouer de la mémoire pour un entier
    // 2. Castez le pointeur retourné en int*
    // 3. Stockez la valeur d'entrée dans la mémoire allouée
    // 4. Affichez la valeur stockée
    // 5. Calculez et stockez le carré au même emplacement
    // 6. Affichez la valeur au carré
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logic & Flow