|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : tableau [ Archives / Au secours ] (infodaoudi)
Informations & options pour cette discussion
|
vendredi 12 mai 2006 à 19:00:12 |
tableau

infodaoudi
|
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; data=new vecteur[500]; Al.open(fichier); if(!Al)cout<<"error opening fichier"<<endl; while (Al) { for(int i=0;i<d;i++) { Al>>val1; data[lp].coord[i]=val1; } lp++; } Al.close(); *t=lp; //return data; }
|
|
|
|
vendredi 12 mai 2006 à 19:06:52 |
Re : tableau

SAKingdom
|
data=new vecteur[500]; Pourquoi tu alloue de la mémoire à data. D'habitude, si c'est un param, on alloue la mémoire pour le param avant l'appelle de la fonction.
___________________________________________ Les plus grands esprits trouvent toujours une solution
|
|
|
|
vendredi 12 mai 2006 à 19:10:55 |
Re : tableau

SAKingdom
|
Ensuite pour allouer quelque chose à une structure on fait ceci:
void test (verteur *data) { data->membre = 150; // par exemple }
voilà. Pas de return.
___________________________________________ Les plus grands esprits trouvent toujours une solution
|
|
|
|
samedi 13 mai 2006 à 01:02:27 |
Re : tableau

ymca2003
|
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.
|
|
|
|
samedi 13 mai 2006 à 10:44:06 |
Re : tableau

infodaoudi
|
j'ai fait la solution suivante :
main() { vecteur *data; data=new vecteur[500]; base::readvecteur(fich,&taille,&dataN); }
void base:: readvecteur(char *fichier, int *t,vecteur **data) { int cp=0,lp=0; float val1; ifstream Al; Al.open(fichier); if(!Al)cout<<"error opening fichier"<<endl; while (Al) { for(int i=0;i<d;i++) { Al>>val1; data[lp]->coord[i]=val1; // ca se plante ici............?? } lp++; } Al.close(); *t=lp; //return data; }
probleme : probléme d'allocation .pourquoi?
|
|
|
|
samedi 13 mai 2006 à 10:58:25 |
Re : tableau

infodaoudi
|
une autre question? si je veux que la taille tu tableau data depend de ce que je lis du fichier comment faire ???? merci pour toutes vos propositions
|
|
|
|
samedi 13 mai 2006 à 11:13:20 |
Re : tableau

ymca2003
|
Réponse acceptée !
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;
*data=new vecteur[500];
Al.open(fichier); if(!Al)cout<<"error opening fichier"<<endl;
while (Al) { for(int i=0;i<d;i++) { Al>>val1; (*data)[lp].coord[i]=val1; } lp++; }
Al.close(); *t=lp;
//return 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; }
|
|
|
|
samedi 13 mai 2006 à 11:15:27 |
Re : tableau

ymca2003
|
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.
|
|
|
|
samedi 13 mai 2006 à 11:34:03 |
Re : tableau

infodaoudi
|
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
|
|
|
|
samedi 13 mai 2006 à 11:49:00 |
Re : tableau

ymca2003
|
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));
// lecture for(int i=0;i<d;i++) { Al>>val1; data[lp].coord[i] = val1; } lp++; }
data_in_file : condition qui te permet de savoir qu'il reste des données dans le fichier (genre fin de fichier)
|
|
|
Cette discussion est classé dans : data, tableau, vecteur, al, lp
Répondre à ce message
Sujets en rapport avec ce message
fseek en c++ [ par imanedaoudi ]
Bonjour, je cherche l'equivalent de fseek en c++, j'ai utilise la fonction suivante: vecteur* RegionApprox:: readvecteur(char *fichier,int *taille) {
fichier [ par imanedaoudi ]
Bonjour, comment detecter la fin du fichier en c++, je cherche à executer l' instruction (*taille=cp)une fois je detecte la fin du fichier vecteur* R
Problème pour l'utilisation d'un constructeur de recopie [ par vincemail ]
Bonsoir à tous, j'ai un petit problème concernant le constructeur de recopie d'une classe, ou plutot son utilisation. Voilà, je crée une classe Vecteu
Convertir un tableau de vecteur de String en pointeur [ par fcoutel ]
Bonjour, J'ai cree un tableau dynamique a 2D de type string vector> tab, je voudrais savoir quel est le meilleur moyen de le convertir en char***.M
Classe contenant vecteur template [ par val3113 ]
Bonjour,Je suis sur un programme cpp sous linux. J'ai créé une classe template "Vecteur" qui est censée pouvoir recevoir plusieurs types dont des clas
tableau/ vecteur [ par moberol ]
Bonjour à tous !je suis debutant en C++, si quelqu'un peux me donner une idée;soit le fichier ci dessous,Module A (....)intput 2;output <font size
tableau des caractere en C [ par themahg ]
ThemahG, Japon toujours! j'ai un problème avec mon programme il bloque à partir de la fonction si dessous:ai
message d'erreur [ par imanedaoudi ]
Salut tous le monde,j'ai le fonction suivante[cpp]vecteur* vecteur:: readvecteur(int *nbrev,char *fichier){ int i=0,cp=0,j=0; float value,val1,val2
fonction qui retourne un vecteur en C/C++ [ par rocketcariboo ]
Je voudrais savoir comment on fait une fonction qui prend un tableau et qui retourne un autre tableau. Quelle est la façon la plus simple. Je sais qu'
stockage avec vecteur ou tableau [ par moberol ]
Bonjour à tous!si quelqu'un peux m'aider....je dois réaliser une structure de donnée pour mémoriser(stocké) mots identiques qui se répète tout le lon
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|