IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Allocation dynamique de tableau... en deux dimensions!


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut Allocation dynamique de tableau... en deux dimensions!
    Bonjour à tous,

    Je voudrais réaliser une allocation dynamique...sur un tableau en deux dimensions .
    Malheureusement je ne trouve pas le moyen de faire ça.
    En réalité mon tableau dynamique en deux dimensions est un tableau de "CASE" (un type que j'ai créé). Mais pour mon test je le fais avec des int.

    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
     
    int main&#40;int argc, char *argv&#91;&#93;&#41;
    &#123;
     
        int** tableau;
        tableau = new int&#91;250&#93;&#91;2&#93;;
        system&#40;"PAUSE"&#41;;
        return EXIT_SUCCESS;
    &#125;
    Bien sur je me doute bien, désormais, qu'il est impossible d'écrire int** mais j'ai essayé au cas où... et il se trouve que mon compilateur me renvoie une erreur sur la ligne du dessous.

    Voilà, j'aimerais savoir comment faire une allocation dynamique sur un tableau en 2D (je sais que c'est pas très très bien de faire des allocations dynamique mais en fait, je n'ai pas d'autre solution.

    Merci d'avance pour votre aide.

    Spartan03
    Pourquoi faire simple quand on peut faire compliqué!

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Voilà, j'aimerais savoir comment faire une allocation dynamique sur un tableau en 2D
    Comme pour les tableaux 1D : le pointeur doit être un pointeur sur un type de celui de l'élément du tableau qui ici est un tableau de 2 int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      int &#40;* tableau&#41;&#91;2&#93;;
      tableau = new int&#91;250&#93;&#91;2&#93;;
    ....
      tableau&#91;i&#93;&#91;j&#93; = ...
    je sais que c'est pas très très bien de faire des allocations dynamique
    Et pourquoi ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Merci beaucoup pour ton aide. En fait je suis encore débutant en programmation et je n'avais jamais fait le rapporchement entre les pointeurs et les type*. Je pensais donc que le cpu réservait une certaine place en mémoire (assez grande) et ensuite, qu'il y mettait le contenu du tableau dynamique.

    Mais je viens de saisir la subtilité, un type* est en fait un pointeur! Et lorsqu'on alloue le tableau (ex : new int[10]) On crée dans la mémoire, là ou il y'a de la place, le tableau de int et l'on fait pointer le pointeur dessus ainsi on manipule le tableau dynamique de la même façon qu'un autre.

    Au moins, je me coucherais moins bête ce soir.

    Encore merci.
    Pourquoi faire simple quand on peut faire compliqué!

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Mais je viens de saisir la subtilité, un type* est en fait un pointeur!
    UnType * est un type adresse de qq chose (du type UnType). Un pointeur est un objet qui prend pour valeur l'adresse de qq chose
    Et lorsqu'on alloue le tableau (ex : new int[10]) On crée dans la mémoire, là ou il y'a de la place, le tableau de int et l'on fait pointer le pointeur dessus
    Oui, on range l'adresse du bloc mémoire obtenu dans un objet. Puisque la valeur à stocker est une adresse, il faut un pointeur
    ainsi on manipule le tableau dynamique de la même façon qu'un autre
    Oui, dans les deux cas la valeur est l'adresse du premier élément créé
    Au moins, je me coucherais moins bête ce soir.
    Attention au mal de tête
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Ok, Merci pour les explications supplémentaires!!
    Pourquoi faire simple quand on peut faire compliqué!

  6. #6
    Invité
    Invité(e)
    Par défaut
    A ta place, pour un tableau en 2D, je ferais simplement comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int MonTab&#91;12*12&#93;;
    // ...
    // MonTab&#91;x&#93;&#91;y&#93; &#58;
    MonTab&#91;y*12+x&#93;

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut


    http://c.developpez.com/faq/cpp/?pag..._new_array_dim

    Mais on préfèrera toujours quelque chose de moins primitif, genre std::vector si on a la flemme d'utiliser une bibliothèque genre boost.

    http://c.developpez.com/faq/cpp/?page=STL#STL_vector

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/06/2008, 19h05
  2. Réponses: 9
    Dernier message: 12/06/2007, 15h15
  3. Un string dans un tableau de deux dimensions...
    Par FinalSpirit dans le forum C++
    Réponses: 5
    Dernier message: 15/01/2006, 15h29
  4. [PERL] Trier un tableau a deux dimensions
    Par piregwan dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2005, 23h29
  5. Réponses: 13
    Dernier message: 13/10/2005, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo