Pointeurs et mémoire

Pointeurs et adresses

Un pointeur contient l’adresse d’un objet compatible ; le déréférencement accède à cet objet.

Qu’est-ce que Pointeurs et adresses ?

Un pointeur contient l’adresse d’un objet compatible ; le déréférencement accède à cet objet.

Stockez une adresse, déréférencez-la et modifiez l’objet d’origine.

Points importants

  • Un pointeur doit viser un objet vivant compatible ou être null.
  • Chaque allocation possédée doit être libérée exactement une fois.
  • Exprimez clairement ownership et const.

Exemples de code C et C++

C
Exécuter →
main.c
#include <stdio.h>

int main(void) {
    int score = 70;
    int *score_ptr = &score;
    *score_ptr += 5;
    printf("score=%d same-address=%s\n", score,
           score_ptr == &score ? "yes" : "no");
    return 0;
}
Résultat attendu
score=75 same-address=yes
C++
Exécuter →
main.cpp
#include <iostream>

int main() {
    int score = 70;
    int* score_ptr = &score;
    *score_ptr += 5;
    std::cout << "score=" << score << " same-address="
              << std::boolalpha << (score_ptr == &score) << '\n';
}
Résultat attendu
score=75 same-address=true

Comparaison entre C et C++

C emploie directement les pointeurs bruts. C++ les conserve pour l’accès non propriétaire et préfère une référence lorsque null n’a pas de sens.

C

Ownership et nettoyage sont des conventions gérées manuellement.

C++

Les conteneurs et RAII encodent ownership et nettoyage dans la durée de vie.

Exercices pratiques

Exécutez les deux versions puis modifiez-les pour observer leurs garanties.

  • Testez null et les échecs d’allocation.
  • Utilisez AddressSanitizer et UndefinedBehaviorSanitizer.
  • Documentez l’ownership de chaque pointeur.