Partage
  • Partager sur Facebook
  • Partager sur Twitter

tableaux

    5 juillet 2007 à 12:27:05


    Bonjour,

    Est t'il possible de creer un tableau dynamique à plusieurs colonnes?
    J'ai essayé ceci mais mon compilateur marque:
    "impossible de convertir de 'double (*)[2]' en 'double *'"


    double *tab;
    tab = new double[nb][2];
     
    • Partager sur Facebook
    • Partager sur Twitter
      5 juillet 2007 à 13:57:59

      Il faut que tu déclare tab comme un pointeur de pointeur:
      double **tab;
      tab = new double[nb][2];
       
      je crois bien que c'est ça.
      • Partager sur Facebook
      • Partager sur Twitter
        5 juillet 2007 à 15:15:36

        Pourquoi réinventer la roue ?

        La STL gère les tableaux dynamiques via le template <vector> !!

        • Partager sur Facebook
        • Partager sur Twitter
        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
          5 juillet 2007 à 19:15:44

          Citation : Nanoc

          Pourquoi réinventer la roue ?
          La STL gère les tableaux dynamiques via le template <vector> !!


          Parce que des fois c'est bien de savoir jouer avec la mémoire

          ok qu'est-ce qu'un tableau à 2 dimension ? un tableau de tableaux

          ainsi je déclare un tableau contenant x pointeur de tableaux. Les tableaux peuvent être de tailles différentes mais disons qu'ils seront tous de taille y.

          je déclare mon tableau conteneur et ensuite je déclare chacun de mes sous-tableaux.
          // Déclaration d'un tableau "conteneur"
          int** tab = new int* [ x ];
          for( int i = 0; i < x; i++ )
          {
              // Déclaration des sous-tableaux, 1 à 1
              tab[ i ] = new int [ y ];
              for( int j = 0; j < y; j++ )
              {
                  tab[ i ][ j ] = 0; // initialisation
              }
          }

          On va donc avoir en mémoire x + 1 tableaux dont x tableaux de longueur y et 1 de longueur x. :p

          N'oublions pas que nous jouons avec des pointeurs et de l'allocation dynamique, nous devons gentillement libérer la mémoire
          for( int i = 0; i < x; i++ )
          {
              // destruction de chaque sous-tableaux
              delete [] tab[ i ];
          }
          // destruction du tableau "conteneur"
          delete [] tab;
          • Partager sur Facebook
          • Partager sur Twitter
            5 juillet 2007 à 23:10:29

            Quand on joue avec la mémoire, c'est bien de le faire correctement tant qu'à faire : http://c.developpez.com/faq/cpp/?page=pointeurs#POINTEURS_new_array_dim

            (de quoi convaincre n'importe qui d'encapsuler ça dans une classe RAII)

            Quant à l'erreur, c'est parce que le type de ce que te renvoie new, n'est pas un double*, mais un pointeur de tableau à deux colonnes.
            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
              6 juillet 2007 à 14:28:10

              Ah! tu vois, je ne connaissais pas l'exception bad_alloc! Je suis ici pour apprendre moi aussi ;-)


              Oui l'encapsuler permet de conserver la taille et la capacité ( nombre d'éléments existants et nombre maximum d'espaces pré-alloués et aussi faire ce genre de validation lors de création/modification de la capacité ) Mais tant qu'à utiliser une classe pour le faire... STL vectors
              • Partager sur Facebook
              • Partager sur Twitter
                6 juillet 2007 à 23:09:09

                Ce n'est pas tant l'aggrégation taille<->pointeur qui est importante. Le RAII est une différence de poids.
                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                tableaux

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown