Bases de la programmation en C
int *make(void) {
int x = 42;
return &x;
}Quelle affirmation sur le pointeur renvoyé par la fonction make ci-dessus est correcte ?
- Ax reste au même endroit jusqu'à la fin du programme : on peut toujours lire 42 sans risque par le pointeur renvoyé
- Bx est déplacé dans le tas au retour : l'appelant doit le libérer par free après usage
- CLa durée de vie de x se termine au retour de la fonction : le pointeur renvoyé désigne un emplacement invalide, et l'utiliser est un comportement indéfini
Afficher la réponse et l'explication
Réponse : C. La durée de vie de x se termine au retour de la fonction : le pointeur renvoyé désigne un emplacement invalide, et l'utiliser est un comportement indéfini
x est une variable locale sans static (une variable automatique) : sa durée de vie se termine au retour de la fonction, et l'emplacement qu'elle occupait sur la pile est réutilisé par d'autres appels de fonction. Un pointeur qui désigne une zone dont la durée de vie est terminée s'appelle un pointeur pendant, et lire ou écrire à travers lui est un comportement indéfini. gcc donne un avertissement pour ce code et peut même générer un code qui renvoie NULL. On renvoie plutôt la valeur elle-même, ou l'on utilise une zone préparée par l'appelant ou allouée par malloc.
Continuer : 9 autres questions sur Bases de la programmation en C