Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/11/2007, à 20:12

jerem5

sprintf en retour de fonction

salut
j'ai crée une fonction qui retourne une char *  (une chaine de caractère).
dans celle ci j'utilise un sprintf, ma chaine passée en paramètre contient ce qui m'interesse mais j'aimerai renvoyer cette chaine.
j'ai tapé return chaine;
mais le compil m'affiche :      test.c:36: attention : cette fonction retourne l'adresse d'une variable locale


je comprends pas trop où est le problème
si quelq'un peu m'aider svp!!!

#2 Le 20/11/2007, à 20:25

Watchwolf

Re : sprintf en retour de fonction

"chaine" est déclaré comme variable local, elle sera donc detruite a la fin de la fonction. Le compile trouve donc bizarre que tu retourne son adresse.

Pour palier ce probleme, il faut que tu declare chaine comme char* et que tu fasse un malloc. L'espace alloué lors d'un malloc n'est pas détruit en fin de fonction, il faut le faire manuellement avec un free.

Hors ligne

#3 Le 20/11/2007, à 21:38

jerem5

Re : sprintf en retour de fonction

je te remercie pour ta reponse, cependant mon char * que j'aurai crée, une fois retourné, ne pourra plus etre libéré (c'est à  dire plus de free possible) c'est bien ca?

#4 Le 20/11/2007, à 21:39

tchonny

Re : sprintf en retour de fonction

Il n'y a aucun problème à  desallouer une zone mémoire ayant été allouée dans une fonction.
Le free ne posera donc aucun problème.

Hors ligne

#5 Le 20/11/2007, à 22:09

Watchwolf

Re : sprintf en retour de fonction

En faite ce qu'il faut comprendre c'est que:
ta fonction a une zone mémoire à  elle. Les variables locales sont alloué dans cette zone. Lorsque la fonction est fini, cette zone est "détruite", désallouer.
Malloc va allouer la mémoire dans une zone dynamique spécial, qui est commune à  tous le programme.

Hors ligne

#6 Le 20/11/2007, à 22:40

abetsic

Re : sprintf en retour de fonction

Pour plus d'informations sur ces subtilités d'espaces mémoires tu peux faire des recherches sur "la pile" et "le tas" (stack et heap en Anglais).

C'est assez utile de comprendre ce qui se passe à  l'execution d'un programme pour pouvoir débuger plus facilement.

Hors ligne