l’adresse de la mémoire locale est valide après le retour de la fonction?

Dupliquer possible:
Peut-on accéder à la mémoire d’une variable locale en dehors de sa scope?

Je rafraîchissais les connaissances sur le fonctionnement de la mémoire en interne et j’ai fait face à la confusion. Voici un exemple de code

int * func(){ int retval = 3; return &retval; } int main(void){ int *ptr = func(); printf("address return from function %p and value %d\n", ptr, *ptr); } 

D’après ce que je comprends, la mémoire de stack fonctionne avec une routine. Lorsqu’une fonction est appelée, elle est poussée dans la stack. Et la durée de vie des variables locales dans cette routine ne serait plus valide une fois la fonction retournée. Donc, retourner l’adresse de la variable locale semble ne pas être valide, mais lorsque je teste ce code, il renvoie en fait son adresse et rest valide après le retour de la fonction.

est-ce que je comprends mal le concept? Apprécié tous les commentaires, merci.

“Tester le code” n’est pas un moyen significatif de déterminer si quelque chose est valide ou non. Votre code produit un comportement indéfini. Une manifestation possible d’un comportement indéfini est que le code peut sembler fonctionner. En d’autres termes, vous avez simplement eu de la chance.

Pour répondre à la question: non, il n’est pas valide de renvoyer un pointeur sur une variable locale ni de déréférencer un tel pointeur. Toute tentative en ce sens conduit à un comportement indéfini.