Pages : 1
#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
Pages : 1