freepouy18
Messages postés49Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention15 septembre 2005
-
5 août 2005 à 12:39
freepouy18
Messages postés49Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention15 septembre 2005
-
8 août 2005 à 14:58
Salut tlm! J'aimerais savoir si je peux ou non passer en paramètre un tableau dynamique dont je n'ai pas encore alloué de mémoire(allocation à l'intérieur de la fonction). En gros, voila ce que je veux faire :
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 5 août 2005 à 13:45
Je ne vois aucun probleme a faire ca. Par contre, si les variables que tu passes en param sont 'globales', il n'y a aucun interet a faire ceci, puis ce que tu pourras acceder a celles-ci a l'interieur de la fonction que tu appelles. C'est ca ton probleme d'allocation dynamique ?
bathof
Messages postés28Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention31 janvier 2009 5 août 2005 à 13:48
Salut,
tu peux passer sans problèmes un tableau dynamique en paramètre, mais il y a
des choses à savoir.
Quand tu crées un tableau dynamique tu crées en fait une zone mémoire pour ton tableau dans la mémoire vive qui est pointée par un pointeur du même type, donc CString* tableau, n'est pas un tableau mais un pointeur sur l'adresse de la première case mémoire de ta zone alloué.
Alors pour passer un tableau dynamique en paramètre tu passes un pointeur sur
la zone mémoire concernée.
Quand tu fais : tableau = new CString [10]; tu crées la zone mémoire pour ton
tableau de 10 de type CString et "new" vas te retourné l'adresse au pointeur tableau.
Attention n'oublie pas de supprimer ta zone mémoire quand tu ne l'utilise plus, car
si tu ne détruits pas les tableaux systématiquement la mémoire vive vas saturée.
Ex : delete [] tableau;
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 5 août 2005 à 14:08
Bathof, si ton explication est juste, tu es malheureusement l'auteur d'une belle fuite de mémoire avec ton code donné comme exemple.
Le prototype correct de ta fonction est "void( char * & tab )". Tu vois pourquoi ? Je sais qu'on ne peut pas modifier son post et c'est bien dommage.
Ca rejoint un topic déjà existant et tres récent. Le passage par référence rend l'écriture plus sympathique. La solution proposée par Galmiza est ok si on tient à faire un passage par pointeur (du pointeur [sic!]).
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 5 août 2005 à 15:14
J'ai rien compris. Pour t'en convraince, tu remarqueras que dans ton code, apres l'appel de creat(), tableau est tjs égale à 0. Il n'est pas modifié dans le contexte appelant....
freepouy18
Messages postés49Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention15 septembre 2005 8 août 2005 à 14:22
En fait j'ai une classe qui me permet de faire un traitement de données texte. Je parcours un document texte et j'ai un test qui si il est validé appel cette fonction. Ici, ma fonction permet de remplir un tableau de CString avec des données texte situées à une certaine position. Ce tableau est un attributs de ma classe puisqu'il va me servir dans une autre classe.
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 20111 8 août 2005 à 14:30
a défaut d'oublier de la désallouer, tu ne l'a pas alloué du tt ce qui est pire...
sinon,
comme le dit
Xterminhate
précise ce que tu veux....
mais c'est vrai que vu la maniere dont c'est partit, on est pas sur que
tu arrive qq part et encore moins près de ce que tu t'étais fixé comme
objectif
freepouy18
Messages postés49Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention15 septembre 2005 8 août 2005 à 14:58
mais si je l'ai allouer, et quand je fais : tab = new CString et temp= new CString[nb_element+1]
Ce que je veux c'est juste savoir si je dois désallouer la meme des variables locales tab et temp et comment?
Ma fonction renvoi bien un tableau de CString avec les données voulues.Elle sont stockées dans mon tableau déclaré en global dont je désalloue la mem dans le destructeur de classe. Maintenant, encore une fois, je veux juste savoir comment désallouer la mem des variables locales tab et temp?