La mémoire d'une variable locale peut-elle être accessible en dehors de sa portée ?
Bonjour, collègues ! J'ai récemment commencé à étudier le C++ et j'ai rencontré un comportement étrange. J'ai écrit une fonction simple qui retourne un pointeur vers une variable locale :
```cpp
int* getPointer() {
int localVar = 42;
return &localVar;
}
int main() {
int* ptr = getPointer();
std::cout << *ptr << std::endl; // Affiche 42... parfois
// Ensuite j'essaie de l'utiliser à nouveau
std::cout << *ptr << std::endl; // Affiche des déchets ou plante
}
```
Je pensais qu'après la sortie de la fonction `getPointer()`, la variable `localVar` était détruite et le pointeur devenait un dangling pointer. Mais en pratique, le premier affichage montre souvent la valeur correcte 42. Pourquoi cela se produit-il ? Est-ce un undefined behavior ou y a-t-il une explication ?
Ce qui me trouble, c'est que parfois le programme fonctionne "normalement", et parfois il plante. J'ai lu que la mémoire de la pile n'est pas effacée immédiatement, mais cela ne signifie pas qu'on peut l'utiliser, n'est-ce pas ? Ou je confonds quelque chose ? Dites-moi comment comprendre correctement la durée de vie des variables.
No answers yet.
Connectez-vous pour laisser une réponse
Blogs
Erreur @Override dans Eclipse : comment vaincre "Must Override a Superclass Method"
Microservices en Swift : architecture et pratique de A à Z
Génération d'entiers aléatoires en JavaScript : plage précise en 2025
Rate Limiting et Throttling en Kotlin : Comment protéger votre API des surcharges