Pointeurs et allocation dynamique
Les pointeurs manipulent des adresses, et l’allocation dynamique impose de vérifier puis libérer.
Adresses et déréférencement
Idée centrale
Une variable a une adresse en mémoire, et un pointeur stocke cette adresse.
&donne l’adresse d’une variable.*accède à la valeur pointée.- Une adresse identifie un emplacement mémoire.
À retenir
- Un pointeur contient une adresse, pas une valeur.
*plit ou modifie la donnée pointée.
Déclaration et manipulation
Écrire un pointeur
Déclaration correcte
- Le type du pointeur suit le type pointé.
int *pcible un entier.- On initialise dès que possible.
Erreurs classiques
- Pointeur non initialisé.
- Adresse incompatible.
- Usage avant vérification.
Réflexe de sécurité
- 1
Déclarer le pointeur avec le bon type.
- 2
Lui donner une adresse valide.
Tableaux et fonctions
Tableau et adresse
Comparer
Tableau
- Suite contiguë d’éléments.
- Nom non réassignable.
- Accès par indice très courant.
Pointeur
- Variable contenant une adresse.
- Peut changer d’adresse.
- Utile pour parcourir ou transmettre.
Allocation et libération
Réserver puis rendre
- 1
Demander la mémoire avec
malloc. - 2
Vérifier que l’adresse retournée est valable.
- 3
Utiliser la zone allouée.
Mémo express
malloc prend, free rend. Après free, le pointeur ne doit plus servir.
Erreurs et bonnes pratiques
Risques à connaître
| Erreur | Cause fréquente | Conséquence |
|---|---|---|
| Segmentation | Pointeur invalide ou NULL | Accès mémoire interdit |
| Fuite mémoire | Oubli de free | Mémoire perdue |
| Pointeur pendant | Après free | Comportement indéfini |
Mini-défi
- Que renvoie
&x? - Que fait
*p?
Synthèse
- Un pointeur stocke une adresse et se lit avec
*. - Les tableaux et les fonctions utilisent souvent les adresses.
mallocréserve,freelibère, et la vérification est indispensable.- Les erreurs viennent surtout des pointeurs invalides et des oublis de libération.
