Avatar ·

La mémoire d'une variable locale peut-elle être accessible en dehors de sa portée ?

Bonjour à tous ! Je viens de commencer à apprendre le C++ et j'ai rencontré un comportement étrange. J'ai écrit une fonction qui retourne un pointeur vers une variable locale : ```cpp int* getPointer() { int x = 42; return &x; } int main() { int* ptr = getPointer(); std::cout << *ptr << std::endl; // Affiche 42 // ... plus tard ... std::cout << *ptr << std::endl; // Peut afficher des déchets } ``` Le premier affichage fonctionne — j'obtiens 42. Mais j'ai lu qu'il ne faut pas faire cela, car x est une variable locale et sa mémoire est libérée après la sortie de la fonction. Pourtant, le code compile et fonctionne ! Pourquoi ? Et que se passe-t-il réellement avec la mémoire ? Est-ce que le compilateur conserve la valeur d'une manière ou d'une autre, ou est-ce simplement de la chance ? Comment retourner correctement des données depuis une fonction si je dois retourner un pointeur ? Merci d'avance pour l'explication ! <<>>

Pourquoi le code "fonctionne" et quel est le danger

Vous avez rencontré un exemple classique de dangling pointer (pointeur pendant).