« Structures de données/Pointeurs » : différence entre les versions

Aller à la navigation Aller à la recherche
(WB:RD : ! orthographe/grammaire)
 
=== Utilisation ===
 
Pour stocker des données dans notre mémoire dynamique, il faut réserver l'espace nécessaire.
 
p est une variable de type pointeur (vers T, un type quelconque : entier...) :
 
Lexique
p : ^T (* un pointeur vers des données de type T *)
 
Au lancement du programme, il sera réservé dans le mémoire statique l'espace permettant de stocker ce pointeur. Voici la représentation de la mémoire à cet instant :
 
[[Image:StructDonnees_Memoires_pointeur_lexi.svg]]
 
On réserve l'espace nécessaire pour stocker une variable de type T en faisait appel à l'instruction :
 
new(p)
 
Voici l'effet produit par new sur la mémoire.
 
[[Image:StructDonnees_Memoires_pointeur_new.svg]]
 
Deux choses se sont produites :
* De la mémoire a été réservée pour stocker une donnée de type T (la case pointée est grisée).
* La variable p contient l'adresse mémoire de cet espace réservé (représenté par une flèche).
 
p contient alors l'adresse de l'espace qui nous pourront utilisé : on peut donc stocker le contenu de t en mémoire dynamique.
 
Pour utiliser l'espace pointé par p, nous utiliserons l'expression <code>p^</code>
 
p^:=???
 
L'espace pointé contient alors la valeur de l'expression qu'on a assigné :
 
[[Image:StructDonnees_Memoires_pointeur_assignation.svg]]
 
On peut libérer l'espace : c'est à dire indiquer au système d'exploitation que cette partie de la mémoire dynamique n'est plus utilisée et qu'il peut désormais en faire ce qu'il veut. Pour cela on utilise la procédure « réciproque » de <code>new</code> :
 
delete(p)
 
[[Image:StructDonnees_Memoires_pointeur_delete.svg]]
 
On remarquera qu'après un <code>delete</code> la donnée stockée ainsi que le pointeur restent en mémoire : la seule chose qui change est que l'espace en mémoire dynamique n'est plus réservé. La donnée pointée peut donc être écrasée. La valeur de p^ restera en mémoire tant que le système d'exploitation n'aura pas décidé d'attribuer cet espace. Remarquez que demander au processeur de supprimer les contenus qui ont été stockés serait une perte de temps puisque si cette partie de la mémoire venait à être utilisé, les données serait écrasées de toute façon.
 
Remarque : l'utilité de ce qui est expliqué dans cette partie « utilisation » peut échapper au lecteur. En effet, cette partie sert seulement à donner les procédures <code>new</code> et <code>delete</code>. Stocker la valeur de t dans la mémoire dynamique n'a aucun intérêt en soi puisque la valeur est déjà dans t. L'important est de comprendre comment (par <code>new</code> et <code>delete</code>) on peut stocker et lire des informations en mémoire dynamique.
 
=== Exemple avec des entiers ===
Utilisateur anonyme

Menu de navigation