cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 20048 17 janv. 2003 à 11:07
réponse courte OUI
réponse : lorsqu' une fonction renvoie un pointeur sur quelque chose, ce quelque chose doit survivre au retour de fonction (et à la perte de la pile correspondante)
Il est courant de passer par de l'allocation dynamique
new/delete
exemple :
#include
using namespace std;
double* f()
{
double* tab = new double[2];
tab[0]=0.;tab[1]=1.;
return tab;
}
int main()
{
double * p = f();
cout << p[0] << " " << p[1] << endl;
delete[]p;//ne pas omettre sous peine de fuite
return 0;
}
on peut aussi demander à la fonction appelante d'allouer la mémoire que la fonction appelée met à jour...
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 20048 17 janv. 2003 à 19:19
Merci de nous dire merci
Une petite remarque concernant le dernier code de csmarc
Comme le tableau est global, il n'est pas nécessaire de faire de l'allocation dynamique: ni de new[] ni de delete[]
Dans le cas d'un tableau global, il n'est pas besoin de retourner qui que ce soit dans la fonction, il sffit quelle valorise le tableau
Lorsque je proposais que l'appelant alloue lui même la mémoire je pensais plutôt à :
#include
using namespace std;
void f(double* tab, int taille)
{
for (int i=0; i<taille; i++) tab[i] = i;
}
int main()
{
double tabD[2];//allocation automatique
f(tabD, 2 );
cout << tabD[0] << " " << tabD[1] << endl;
return 0;
}
dans ce cas, le tableau ET sa taille est passée à la fonction.
Elle n'a rien à retourner
C'est le plus simple