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 » (allocation de mémoire) et vous permet d'allouer dynamiquement de la mémoire lorsque 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 devez le transtyper vers le type de données approprié.

#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(), et de toujours transtyper le pointeur void retourné pour qu'il corresponde au type de données avec lequel vous travaillez.

challenge icon

Défi

Facile

Écrivez un programme C qui illustre 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 (caster) 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 d'entrée 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.

Aide-mémoire

La fonction malloc() alloue de la mémoire de manière dynamique à partir du tas (heap) pendant l'exécution du programme. Elle prend le nombre d'octets à allouer et renvoie un pointeur void vers le bloc de mémoire alloué, ou NULL si l'allocation échoue.

Incluez <stdlib.h> pour utiliser malloc() :

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Allouer de la mémoire pour un entier

Points clés :

  • Toujours transtyper (caster) le pointeur void retourné vers le type de données approprié
  • La mémoire reste disponible jusqu'à ce qu'elle soit explicitement libérée
  • Offre la flexibilité de demander des quantités exactes de mémoire au moment de l'exécution
  • Utilisez sizeof() pour déterminer le nombre correct d'octets nécessaires

Essayez vous-même

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

int main() {
    // Lire l'entrée
    int input_value;
    scanf("%d", &input_value);
    
    // À FAIRE : Écrivez votre code ci-dessous
    // 1. Utiliser malloc() pour allouer de la mémoire pour un entier
    // 2. Convertir le pointeur retourné en int*
    // 3. Stocker la valeur d'entrée dans la mémoire allouée
    // 4. Afficher la valeur stockée
    // 5. Calculer et stocker le carré au même emplacement
    // 6. Afficher 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