Allocation dynamique - malloc()
Fait partie de la section Logique & Flux du Journey C de Coddy. Leçon 32 sur 63.
Vous allez maintenant découvrir malloc(), la fonction principale permettant de demander de la mémoire au tas pendant l’exécution du programme. La fonction malloc() signifie « 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 lors de la compilation.
La fonction malloc() prend un argument : le nombre d’octets que vous voulez allocate. Elle renvoie un pointeur void vers le bloc de mémoire allocated, ou NULL si l’allocation échoue. Puisqu’elle renvoie un pointeur void, vous pouvez l’affecter directement à un pointeur typé ; le transtypage est facultatif en C (contrairement à 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 qui peut contenir un entierLe principal avantage de
malloc()est sa flexibilité : vous pouvez demander exactement la quantité de mémoire dont vous avez besoin lors de l’exécution, et cette mémoire reste disponible jusqu’à ce que vous la libériez explicitement. Cela est particulièrement utile lorsque vous ne savez pas de quelle quantité de mémoire vous aurez besoin avant l’exécution de votre programme.
N’oubliez pas d’inclure <stdlib.h> pour utiliser malloc() ; convertir explicitement le pointeur void renvoyé est facultatif en C, puisqu’il est automatiquement converti vers le type auquel vous l’affectez.
Défi
FacileÉcrivez un programme en C qui montre l’allocation dynamique de mémoire à l’aide de malloc() pour créer et manipuler un seul entier sur le tas. Votre programme doit :
- Utiliser
malloc()pour allouer dynamiquement de la mémoire pour un entier - Convertir le pointeur void renvoyé en pointeur vers un entier
- Lire une valeur entière saisie par l’utilisateur
- Stocker la valeur saisie dans la mémoire allouée dynamiquement à l’aide de l’opérateur de déréférencement
- Afficher la valeur stockée au format :
Stored value: [value] - Calculer et stocker le carré de la valeur au même emplacement mémoire
- 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 montrer le fonctionnement de base de l’allocation dynamique de mémoire : demander de la mémoire sur le tas, l’utiliser pour stocker et manipuler des données, et travailler avec la mémoire allouée grâce aux opérations sur les pointeurs.
Par exemple, si l’utilisateur saisit 7, votre sortie doit être :
Stored value: 7
Squared value: 49Ce défi vous présente le concept fondamental de l’allocation dynamique de mémoire, dans lequel la mémoire est demandée lors de l’exécution plutôt que d’être fixée au moment de la compilation, ce qui donne à 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. Convertissez 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. Print the squared value
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes6Gestion de la mémoire
Mémoire Pile vs TasAllocation dynamique - malloc()Utiliser sizeof() pour l'allocationVérifier l'échec de l'allocationLibérer la mémoire avec free()Allouer avec calloc()Récapitulatif : Tableaux dynamiquesEntraînez-vous par vous-même : Compilateur C en ligne