infodaoudi
Messages postés117Date d'inscriptionvendredi 10 février 2006StatutMembreDernière intervention30 mars 2012
-
12 mai 2006 à 19:00
infodaoudi
Messages postés117Date d'inscriptionvendredi 10 février 2006StatutMembreDernière intervention30 mars 2012
-
13 mai 2006 à 11:55
bonjour,
je veux récupérer le tableau *data à l'exterieure de la fonction readvecteur, comment faire sans utiliser return. Quelqu'un à une idée?
merci d'avance
void base:: readvecteur(char *fichier, int *t,vecteur *data)
{
int cp=0,lp=0;
float val1;
ifstream Al;
//vecteur *data;
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 13 mai 2006 à 11:13
si tu prend cette methode :
void base:: readvecteur(char *fichier, int *t,vecteur **data)
= > pointeur
au lieu de la mienne :
void base:: readvecteur(char *fichier, int *t,vecteur* &data)
=> reference
il y a une indirection de plus à faire :
void base:: readvecteur(char *fichier, int *t,vecteur * * data)
{
int cp =0,lp= 0;
float val1;
ifstream Al;
//vecteur *data;
====================================================
il y a 3 methodes pour ce que tu veux faire :
1) garder la fct initiale mais faire l'allocation en dehors de la fonction
=> le code est identique au post initial mais sans l'alloc dans la fct
void base:: readvecteur(char *fichier, int *t,vecteur *data)
main()
{
int taille = 0;
vecteur *data = NULL;
data=new vecteur[500];
base::readvecteur(fich, &taille, data);
}
2) faire l'allocation dans la fonction et utiliser une ref sur un pointeur.
=> le code est identique au post initial
void base:: readvecteur(char *fichier, int *t,vecteur * &data)
main()
{
int taille = 0;
vecteur *data = NULL;
base::readvecteur(fich, &taille, data);
delete[] data;
}
3) faire l'allocation dans la fonction et utiliser un pointeur sur un pointeur.
=> le code est celui de cette réponse
void base:: readvecteur(char *fichier, int *t,vecteur * *data)
main()
{
int taille = 0;
vecteur *data = NULL;
base::readvecteur(fich, &taille, &data);
delete[] data;
}
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 13 mai 2006 à 01:02
void base:: readvecteur(char *fichier, int *t,vecteur* &data);
passer une ref sur le ptr ermet de récupérer la nouvelle valeur du ptr.
mais vu que tu fait une allocation dynamique fixe (la taille ne dépend pas de ce que tu vas lire dans le fichier), tu pourrais auusi bien faire l'alocation à l'extérieure de la fonction.
Petiit pb : i ton fichier ne peut pas être ouvert, tu sautes bien la boucle mais tu me fermes quand même.
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 13 mai 2006 à 11:15
pour que l'alloc dépend du fichier il faut soit :
1) que la taille soit dans le fichier
2) faire une alloc initiale par malloc, puis augmenter la taille au fur et à mesure avec realloc. Libérer par free.
infodaoudi
Messages postés117Date d'inscriptionvendredi 10 février 2006StatutMembreDernière intervention30 mars 2012 13 mai 2006 à 11:34
Merci bcp ymca2003, c'est une réponse trés compléte, juste une précision pouvez vous me montrer comment faire pour réaliser ta deuxiémen proposition (malloc, realloc)?
merci
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 13 mai 2006 à 11:49
bon je mairise pas trop les streams mais voici grosso modo :
data = NULL;
int lp = 0;
while(data_in_file)
{
// alloation ou réallocation
if(data == NULL)
data = (vecteur*)malloc(sizeof(vecteur));
else
data = (vecteur*)realloc(data, (lp+1)sizeof(vecteur));