Tableau de double

Résolu
cs_LouisJean Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 19 octobre 2008 - 27 nov. 2007 à 17:59
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 28 nov. 2007 à 00:45
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 nov. 2007 à 20:33
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++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 nov. 2007 à 18:18
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++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 nov. 2007 à 18:21
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++ (@++)<!--
0
titof3812 Messages postés 18 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 12 décembre 2007
27 nov. 2007 à 18:24
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 *
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 nov. 2007 à 18:27
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++ (@++)<!--
0
titof3812 Messages postés 18 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 12 décembre 2007
27 nov. 2007 à 18:40
Oups desole on est d'accord c'est un double **
0
cs_LouisJean Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 19 octobre 2008
27 nov. 2007 à 20:10
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   
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 nov. 2007 à 20:19
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++ (@++)<!--
0
cs_LouisJean Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 19 octobre 2008
27 nov. 2007 à 20:45
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!
0
cs_LouisJean Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 19 octobre 2008
27 nov. 2007 à 20:48
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!
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 nov. 2007 à 00:45
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;
}
0
Rejoignez-nous