« Introduction au langage C/Allocation dynamique de mémoire » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (- l'ordre + l’ordre , - t'as + t’as , - d'asile + d’asile , - d'argent + d’argent , - n'hésite + n’hesite , - m'y + m’y , - l'intervention + l’intervention , - "convention de nommage" +...
m Robot : Remplacement de texte automatisé (-\n(==={0,3})(?: *)([^\n=]+)(?: *)\1(?: *)\n +\n\1 \2 \1\n)
Ligne 9 :
Les tableaux en C permettent de ranger des informations et de s'y référer par un numéro, l'index. Dans l’utilisation la plus simple de ces tableaux, on fixe les limites du tableau en écrivant le code. La gestion de la mémoire se fait alors de manière ''automatique''. On peut en revanche décider ou avoir besoin de gérer ''soi-même'' la taille du tableau alors que le programme est en cours d'exécution. Faire cela s’appelle « allouer dynamiquement » de la mémoire au programme.
 
== Introduction ==
On utilise beaucoup plus souvent l'allocation ''automatique'' (où c’est le programme qui se charge de tout) que l'allocation ''dynamique'', mais cela s'avère parfois être l'unique solution.
 
Ligne 25 :
}}
 
== Taille des variables ==
 
Tous les types de variables occupent une certaine place en mémoire, une quantité d'espace qui s'exprime en octets. Selon que vous créez une variable de type <code>short</code> ou de type <code>int</code>, vous avez ainsi besoin de plus ou moins de mémoire. De plus, selon le système considéré, un même type peut occuper une place différente.
Ligne 47 :
}}
 
== Allocation dynamique ==
 
L'allocation dynamique se fait par le biais de la fonction <code>malloc()</code> qui permet d'allouer un certain nombre d'octets et qui renvoie un pointeur sur cette case mémoire allouée.
Ligne 64 :
}}
 
=== Vérifier que l'allocation a été un succès ===
 
Pour vérifier que l'allocation a été un succès, il suffit de tester le pointeur.
Ligne 81 :
}}
 
== Libération de la mémoire ==
 
Pour libérer la mémoire c’est tout aussi facile. La fonction qui permet de libérer de la mémoire est <code>free()</code>, elle attend comme unique paramètre le pointeur sur la case mémoire à libérer.
Ligne 92 :
N'oubliez pas de libérer la mémoire lorsque vous ne l'utilisez pas, surtout dans une structure répétitive. Sans cela, il y aura des « fuites » — des cases mémoires inutilisées mais bloquées par l'allocation (en anglais ''memory leak''). Ce gaspillage pourrait aussi conduire à la consommation de toute la mémoire qui vous est autorisée et provoquer l'arrêt brutal de votre programme.
 
== Allocation dynamique d'un tableau ==
 
Quelle taille prend un tableau de 5 <code>int</code> ? Réponse : <code>5 * sizeof(int)</code>.
Ligne 131 :
}}
 
== Allocation dynamique d'un tableau à "n" dimensions ==
 
Il peut être utile de créer des tableaux dynamiques à plusieurs dimensions. Dans ce cas, il faut créer des indirections de pointeurs multiples.