Avatar ·

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.