Tableau de double [Résolu]

Signaler
Messages postés
8
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2008
-
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
louisjean dev cpp
      salut tous le monde!


Je n’arrive pas a récupère le tableau de double que j’ai remplis dans mon objet class.




 


   TableauDeDouble[10+1][10+1];    //Même chose dans la class


     Ma_class *p_OBJET = new Ma_class;
     
       p_OBJET->MON_OUTIL_DOUBLE(CH_donnees_entrer);   


         /* Le retour de l'objet double qui ne fonctionne pas */
      TableauDeDouble = p_OBJET->Retour_double;  
                  
      delete  p_OBJET;  




        
    TableauDeDouble[10+1];    // En tableau simple ça marche ?

   // Bien sur je met la même chose des deux coté a chaque foi.


Si quelque un a la solution d’avance merci      

11 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Quand je dis :
"allouer la mémoire en dehors"
Je veux dire, allouer la mémoire en dehors de ta méthode ou plus précisément, avant son appel.

char *p = new char[300]; // on alloue
fonction(p); // on passe en param le pointeur

Aussi, quand je dis allouer ici, je ne parle pas uniquement d'allocation dynamique. Il peut aussi s'agir de tableau

char tab[300];
fonction(tab);

est tout aussi valable que faire.

char *p = new char[300];
fonction(p);
// ne pas oublier le delete quand on a plus besoin de la mémoire

même s'il ne s'agit pas tout à fait de la même chose.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
N'essaierais tu pas, par hasard, de retourner une variable locale ? Si c'est le cas, ne t'étonne pas si ça ne fonctionne pas. Un variable locale est "éffacé" au retour de la fonction.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ah et aussi, tab = valeur est impossible. On ne peut pas assigner une valeur à un tableau en entier. tab devra être un pointeur (ou pointeur de pointeurs dans ton cas) pour pointer sur la zone mémoire renvoyé par la fonction.

C++ (@++)<!--
Messages postés
18
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

si tu veux recuperer un tableau de double il faut que tu retourne un pointeur sur une zone memoire que tu aloue dans ta fonction e que tu libere par la suite.

tu doit retourner un char *
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Hein ???
Pas du tout. C'est un double ** qu'il doit retourner.
J'ai justement fais un snippet pour allouer de la mémoire pour un pointeur de pointeurs.
http://www.codyx.org/snippet_allocateur-pointeur-pointeurs_293.aspx

C++ (@++)<!--
Messages postés
18
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

Oups desole on est d'accord c'est un double **
Messages postés
8
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2008

louisjean dev cpp
   TableauDeDouble[10+1];    //Même chose dans la class

     Ma_class *p_OBJET = new Ma_class;
     
       p_OBJET->MON_OUTIL_DOUBLE(CH_donnees_entrer);   

         /* Le retour de l'objet double en tableau simple ça marche */

      TableauDeDouble = p_OBJET->Retour_double;  
                  
      delete  p_OBJET;  

C'est quoi un snippet?

Si quelque un a la solution d'avance merci   
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Un snippet, c'est un bout de code que l'on peut réutiliser dans ses codes.

La solution est d'allouer la mémoire dynamiquement et de renvoyer le pointeurs. TableauDeDouble sera alors un pointeur de pointeurs double (double**).

Une autre solution est d'allouer la mémoire en dehors et de passer l'adresse en paramètre de ta méthode. Tu ne seras, ainsi, pas obligé de faire appel à new et delete.
Sinon, ça fera, au moins, un code bien plus clair.

Si tu n'as rien compris de ce que je vien d'expliquer, inutile d'aller plus loin. Ouvre un livre de C++ et essais de bien maitriser les concepts de mémoire et pointeurs (qui sont d'ailleurs très lié) avant.

C++ (@++)<!--
Messages postés
8
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2008

louisjean dev cpp
Je vais essayer avec mon tableau de double.

Il est que j’ai du mal avec les pointeurs,le tout en poche m’aide beaucoup

Merci!
Messages postés
8
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2008

louisjean dev cpp
Je vais essayer avec mon tableau de tableau de double.

Il est vrai que j’ai du mal avec les pointeurs,le tout en poche m’aide beaucoup

merci a tous!
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bon deja, donnes nous un peu plus de code, car on y comprend rien.

Deuxième point, faut pas écouter tout ce qu'on te dit. Un tableau de double alloué dans une fonction, ca se retourne au type (double*). 3 solutions plus ou moins élégantes selon les gouts pour retourner un tableau 1D de double.

En C/C++:
double * RetourneDouble(int _n)
{
      double * mon_tableau = new double[n];
      return mon_tableau;
}

En C/C++:
void RetourneDouble(double ** _ptr, int _n)
{
      *_ptr = new double[_n];
}

En C++ uniquement:
void RetourneDouble(double * & _ptr)
{
       _ptr = new double[_n];
}

Un tableau 2D de N*P double, c'est un tableau 1D de N*P cases:
double * RetourneTableau2D(int largeur, int longueur)
{
        double * mon_tableau_2D = new double[largeur*longueur];

        mon_tableau_2D[0 * longueur + 0] = 0.0; // <=> point (0,0) du tableau
        mon_tableau_2D[1 * longueur + 2] = 0.0; // <=> point (2,1) du tableau

        return mon_tableau_2D;
}