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 :

Tableau & Structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Par défaut Tableau & Structure
    Bonjour,

    Je dois effectuer l'algorithme d'Huffman pour mon projet de fin d'étude.
    J'ai mon idée en tête, mais je me confronte à un problème. Voila mon code (simplifié):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    main()
    {
     
      typedef struct Huff{
             struct Huff* lg;
             struct Huff* ld;
             char ascii;
             int freq;      
      };
    ....
      i=0;
      do
      {
          struct Huff *STRUCT[0][i];
          STRUCT[0][i]=(struct Huff *) malloc(sizeof(struct Huff)); 
          STRUCT[0][i]->ascii=(char)ASCII[0][i];
          STRUCT[0][i]->freq=(int)ASCII[1][i];
          STRUCT[0][i]->lg=NULL;
          STRUCT[0][i]->ld=NULL;
          printf("%c\t %d \n",STRUCT[0][i]->ascii,STRUCT[0][i]->freq);
          i++;
     
      }while(ASCII[1][i]!=0);
    Ce code fonctionne parfaitement.
    Seulement, si je rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         printf("%c\t %d \n",STRUCT[0][2]->ascii,STRUCT[0][2]->freq);
    Ce qui est pour moi sensiblement idendicte à ce que j'ai écrit avant, cela m'affiche l'erreur suivante :
    invalid type argument of '->'

    Si quelqu'un pouvait m'aider, je lui en serais très reconnaissant

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Ton erreur n'est pas là où tu crois, et ce genre d'erreurs arrive toujours lors d'une mauvaise utilisation de la mémoire...

    Quand tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          struct Huff *STRUCT[0][i];
    Tu définis un tableau à 2 dimensions dont la première est .. nulle... et la deuxième... inconnue....

    Primo, pourquoi veux-tu faire à 2 dimensions ??

    Ensuite, si tu veux faire comme ça, fais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        /* Définir un double pointeur, pour avoir un tableau à 2 dimensions */
     
         struct Huff **STRUCT=NULL;
     
     
         /* Allouer la première dimension (ici 1 seul élément) */
     
         STRUCT=(struct Huff **) malloc(sizeof(struct Huff*)); 
         if ( STRUCT == NULL )
           return ERROR ;
     
     
         /* Allouer la deuxième dimension (ici pouvant contenir (i+1) éléments) */
     
         STRUCT[0] =(struct Huff *) malloc((i+1)*sizeof(struct Huff)); 
         if ( STRUCT[0] == NULL )
           return ERROR ;
     
     
        /* Remplissage du dernier élément du tableau (tel que tu indiquais vouloir le faire plus haut) */
     
        STRUCT[0][i] = ....

  3. #3
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Par défaut
    Pour le tableau à 2 dimensions, tu as parfaitement raison. C'est assez inutile. Mais je ne comprends pas le code que tu me conseilles de faire. Pourrais tu me le commenter s'il te plait?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Bon je t'ai mis les commentaires dans le code de mon post précédent..

    Sinon également un conseil, pour éviter d'avoir à écrire struct à chaque fois.

    Au lieu de déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          typedef struct Huff{
             struct Huff* lg;
             struct Huff* ld;
             char ascii;
             int freq;      
      };
    Il suffit de déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      typedef struct P_Huff{
             struct P_Huff* lg;
             struct P_Huff* ld;
             char ascii;
             int freq;      
      } Huff ;
    Et ensuite tu t'y réfères comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          Huff STRUCT;
     
          STRUCT.ascii=(char)ASCII[0][i];
          ....

    Et je re-pose la question :

    Pourquoi te sers-tu d'un tableau à 2 dimensions ??

  5. #5
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Par défaut
    J'avais besoin d'un tableau à 2 dimensions pour mettre le caractère et sa fréquence.
    Mais la structure à 2 dimensions est inutile, tu as raison.
    Ca me met toujours la même erreur.
    Le code que tu m'as mis est pour un tableau à 2D ?
    Vu que j'ai modifié pour un tableau 1D, j'ai peur d'avoir fait des erreurs mais j'en doute.

    C'est pas très clair ce que j'ai dit.
    En fait j'ai un tableau ASCII à 2D pour la caractere et pour la fréquence du caractère.
    Et je veux faire une structure pour chaque caractere.
    Mais je n'ai pas besoin de 2D pour ma structure, comme tu me l'as fait remarquer.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par irons
    Le code que tu m'as mis est pour un tableau à 2D ?
    OUI

    Citation Envoyé par irons
    Vu que j'ai modifié pour un tableau 1D, j'ai peur d'avoir fait des erreurs mais j'en doute.
    Mets voir ton code...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2006, 11h46
  2. Tableau de structures en parametre d'une fonction
    Par -No Comment- dans le forum C
    Réponses: 19
    Dernier message: 29/03/2006, 15h00
  3. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02
  4. Réponses: 9
    Dernier message: 13/02/2006, 08h39
  5. Trier un tableau de structures
    Par Yux dans le forum C
    Réponses: 7
    Dernier message: 05/11/2005, 17h28

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