-2 votes

Retourner l'adresse de mémoire allouée dans la fonction

Lorsque la mémoire est allouée dans une fonction, n'est-il pas impossible d'utiliser cette mémoire à l'extérieur de la fonction en retournant son adresse ?

Y a-t-il des exceptions ? Il semble que le suivant soit un tel "exemple" :

const char * f() {  
  return "HELLO";  
}

Comment l'expliquer ?

Merci !

3voto

Jerry Coffin Points 237758

Les littéraux de chaîne sont alloués statiquement, donc retourner l'adresse d'un littéral de chaîne comme "HELLO" est sûr, et il peut être utilisé en dehors de la fonction sans aucun problème.

3voto

jamesdlin Points 13455

Pourquoi pensez-vous que c'est impossible? Il semble que vous le confondiez avec la règle concernant le fait de ne pas renvoyer des adresses à des variables locales aux fonctions appelantes. Vous ne pouvez pas le faire car les variables locales à une fonction ont une durée de vie uniquement pour la durée de cet appel de fonction; une fois que la fonction se termine, ces variables deviennent des déchets.

Il y a des choses qui ont des durées de vie qui s'étendent au-delà de la durée de vie de l'appel de fonction; il est acceptable de renvoyer des adresses à ces choses. Des exemples de ces choses sont des blocs de mémoire alloués sur le tas (par exemple avec malloc) ou des choses qui ont une durée de stockage statique (par exemple des variables globales et des littéraux de chaîne).

2voto

Arve Points 3665

"Bonjour" est une constante. Elle ne disparaît pas donc il est OK d'utiliser le pointeur. Une variable locale est une autre histoire...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X