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).