Partage
  • Partager sur Facebook
  • Partager sur Twitter

pointeurs de pointeurs

help plz ^

    27 novembre 2008 à 23:25:55

    bonjour à tous :D

    voilà j'ai un problème avec les double pointeurs :
    en gros j'ai une enumeration d'hexagones et je voudrais allouer un tableau à deux dimensions d'hexagones dynamiquement.
    Pour ça je fais :

    hexagone **tab;
    tab = (hexagone**)malloc(20*30*sizeof(hexagone*)); //pour allouer un tableau de [20][30] par exemple

    puis quand je tente de ranger un hexagone dans mon tableau je fais :
    tab[0][0] = PLAINE;
    mais j'obtiens une erreur de segmentation :euh:

    je vous remercie d'avance pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2008 à 23:54:28

      Bonjour,

      Citation : Ville_

      je voudrais allouer un tableau à deux dimensions d'hexagones dynamiquement.
      Pour ça je fais :

      hexagone **tab;
      tab = (hexagone**)malloc(20*30*sizeof(hexagone*)); //pour allouer un tableau de [20][30] par exemple

      puis quand je tente de ranger un hexagone dans mon tableau je fais :
      tab[0][0] = PLAINE;
      mais j'obtiens une erreur de segmentation :euh:



      Ce que tu fais dans ce que tu as écrit, c'est que tu places dans tab l'adresse d'un tableau 1 dimension de 600 heaxagone*, soit 600 pointeurs sur hexagone... qui eux-mêmes pointent sur quoi ? Mystère...

      Tu a deux façons d'allouer dynamiquement un tableau à 2 dimensions:
      1) tu places dans tab l'adresse d'un tableau de 20 hexagone*, et ensuite tu placees dans chacun de tes 20 hexagone* l'adresse d'un tableau de 30 hexagone.
      2) tu crées directement un grand tableau 1 dimension de 600 hexagone, et tu places dans tab l'adresse d'un tableau 1 dimension de 20 hexagone* contenant les adresse des hexagone situés toutes les 30 cases du grand tableau. Ca permet un accès indexé de la même façon, tab[x][y] avex x [0..19] et y[0..29].

      D'après ce que j'ai eu l'occasion de lire, les performances seraient généralement meilleures avec la seconde option... enfin ça reste au conditionnel.
      • Partager sur Facebook
      • Partager sur Twitter
        28 novembre 2008 à 0:37:07

        Citation : mcyrb


        1) tu places dans tab l'adresse d'un tableau de 20 hexagone*, et ensuite tu placees dans chacun de tes 20 hexagone* l'adresse d'un tableau de 30 hexagone.
        2) tu crées directement un grand tableau 1 dimension de 600 hexagone, et tu places dans tab l'adresse d'un tableau 1 dimension de 20 hexagone* contenant les adresse des hexagone situés toutes les 30 cases du grand tableau. Ca permet un accès indexé de la même façon, tab[x][y] avex x [0..19] et y[0..29].

        D'après ce que j'ai eu l'occasion de lire, les performances seraient généralement meilleures avec la seconde option... enfin ça reste au conditionnel.


        Cela dépend :
        • si les sous-tableaux existent déjà, la meilleure méthode est évidement la première
        • sinon, la meilleur méthode est généralement la seconde, car elle demande seulement 2 allocations au lieu de NbSousTableaux+1 allocations. (cela dépendra toutefois aussi de la suite du traitement, très très légèrement plus couteux a niveau de l'accès aux adresses).
        • Partager sur Facebook
        • Partager sur Twitter

        pointeurs de pointeurs

        × 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