Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment faire une allocation dynamique de double tableau

Sujet résolu
    11 juillet 2007 à 11:46:32

    Bonjour tout le monde

    Tout est dans le titre : savez vous comment faire une allocation dynamique de double tableau?

    J'ai essayé de faire ça mais ça ne marche pas :

    int** m_ListeCase;
    m_ListeCase = new int[nbrCaractereLigne][nbrLigneMap];


    Et voici l'erreur que ça fait :

    Citation : g++

    erreur: «nbrLigneMap" cannot appear in a constant-expression



    J'ai aussi essayé de faire des allocation des tableaux séparément :

    int** m_ListeCase;
    m_ListeCase = new int[nbrCaractereLigne];
    m_ListeCase* = new int[nbrLigneMap];


    Mais ça ne marche toujours pas :(

    Est-ce que vous savez comment en faire??

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      11 juillet 2007 à 11:53:17

      Tadaa:

      int** m_ListeCase;

      /* Allocation */
      m_ListeCase = new int*[nbrCaractereLigne];
      for(size_t i=0 ; i<nbrCaractereLigne ; i++)
          m_ListeCase[i] = new int[nbrLigneMap];

      /* Liberation */
      for(size_t i=0 ; i<nbrCaractereLigne ; i++)
          delete[] m_ListeCase[i];
      delete[] m_ListeCase;
       


      On crée tout d'abord un tableau de pointeurs sur int, puis on fait pointer chacun de ces pointeurs vers le premier élément d'un tableau de int.
      Ce code est incomplet, car new peut lever une exception, et dans ce cas, il y aurait une fuite de mémoire, puisque la mémoire déjà alloué ne serait pas libérée.
      • Partager sur Facebook
      • Partager sur Twitter
        11 juillet 2007 à 12:50:29

        Merci beaucoup pour ce code.

        Il marche mieux que le mien :p

        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2007 à 13:04:52

          Je me répète encore et encore, mais pourquoi réinventer la roue ???

          Le template <vector> de la STL est là pour faire exactement ce que tu veux faire. (Et certainement même plus ;-))

          En C++, on a plus besoin de s'embêter avec les tableaux dynamiques "faits à la main" et autre choses du même type.
          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            12 juillet 2007 à 1:21:12

            Solution juste (autant la montrer si on veut convaincre que les types spécialisés c'est le bien)
            -> http://c.developpez.com/faq/cpp/?page=pointeurs#POINTEURS_new_array_dim

            Types spécialiasés :
            - std::vector<std::vector<T> > : lignes de longueurs différentes, contenu quelconque
            - boost::multi_array, contenu quelconque
            - blizt++ -> matrices hautes perfs
            - boost.ublas -> matrices hautes perfs (challenger)
            - stl_soft::array1d, array2d (contenu quelconque je crois)
            - .... et plein d'autres bibliothèques matricielles
            • 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.

            Comment faire une allocation dynamique de double tableau

            × 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