Bonjour,
j ai une fonction qui doit me retourner un objet pour que je puisse l'uiliser ensuite dans la fonction appelante, le probleme est que cet objet est detruit avant d etre renvoyé.
Bonjour,
j ai une fonction qui doit me retourner un objet pour que je puisse l'uiliser ensuite dans la fonction appelante, le probleme est que cet objet est detruit avant d etre renvoyé.
Sois tu fais une allocation dynamique dans la fonction si tu tiens vraiment à retourner une valeur, soit tu passes un objet par référence (préférable).
On peut voir la fonction en question ?
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Voici la fonction qui crée l objet:
et l appel de la fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 H5File* HDF5_Open(const string file_Name, const int Access) { if(Access == READ_DATA || Access == DELETE_DATA) { cout<<"le fichier existe ps, lecture ou suppression impossible"<<endl; //return -1; } else { /* creation du fichier */ H5File* file_obj = new H5File( file_Name, H5F_ACC_TRUNC ); return file_obj; } }
Ce qui pose probleme donc, c est que file_obj est detruit a la fin de la fonction HDF5_Open, l appel de la fonction recoit donc un pointeur incorrect!
Code : Sélectionner tout - Visualiser dans une fenêtre à part H5File* file_obj = HDF5_Open(file_Name, WRITE_DATA);
Ah non, l'objet alloué/la mémoire allouée n'est pas libéré(e), donc il existe bien après. Sauf que tu dois avoir des warnings dans ta compilation que tu ne résouds pas.
effectivement, j ai regle le probleme, mais sinon, comment fait on pour retourner un objet par reference?
si ton objet est construit dans ta fonction, il est normal qu'il soit détruit à la fin de celle-ci, excepté si tu alloues dynamiquement l'espace memoire dédiée à celui-ci, bref que tu l'instancies à l'aide d'un
Sinon, comme le dit Joelle, tu peux passer une reference de ton objet en parametre de ta fonction et le modifier a l'interieur de celle-ci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonObjet *monObjet = new MonObjet();
EDIT: pourquoi mon avatar il s'annime pas![]()
Partager