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 :

Plantage table de hachage lors de son affichage


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Par défaut Plantage table de hachage lors de son affichage
    Bonjour à tous,

    Mon problème est le suivant:
    Mon programme créé à partir de la lecture d'un fichier texte une liste chainée double.
    Chaque structure contient les informations d'un élève (nom,prénom,...).
    Jusque là tout va bien, ensuite j'ai fais une table de hachage comportant une fonction de hachage et de double hachage.
    Chaque case (à l'index correspondant à la clé haché) contient le pointeur current qui parcoure la liste.
    Donc en résumé, j'ai un tableau de pointeur de structure ELEVE.
    Le soucis est que lorsque je veux afficher les valeurs de mon tableau,
    ça marche nickel avec les nom (table[i]->nom) mais lorsque je le fais avec prénom ça plante.
    Avec les autres aussi, avec initial ça affiche quelque ligne correct puis ça plante, email pareil.
    MAX_TAB est une variable, les autres MAX_... sont des constantes.

    Voici le code:
    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
     
    typedef struct DATA LISTE{
       int taille;
       LISTE *first;
    };
    typedef struct DATA2  ELEVE{
       char nom[MAX_NOM];
       char prenom[MAX_PRENOM];
       char initial[MAX_INITIAL];
       char email[MAX_EMAIL];
       char num_tel[MAX_NUMTEL];
       char classe[MAX_CLASSE];
       ELEVE *next;
       ELEVE *previous;
    };
    je déclare un tableau dynamique dans le main et l'initialise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ELEVE **table=malloc(MAX_TAB * sizeof(ELEVE));
        memset(table,0,MAX_TAB * sizeof(ELEVE));
    Les fonctions de hachage:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    void table_hash(ELEVE** table,LISTE *list)
    {
        ELEVE *current = list->first->next;
        int i,key=0;
        while(current!=NULL)
        {
            key = hash(current->nom,current->prenom);
            for(i=0;table[key]!=NULL;i++)
            {
                key=(key+(i*(hash(current->nom,current->prenom)))) % MAX_TAB; 
                key++;
            }
            table[key] = current;
            key=0;
            current = current->next;
        }
    }
    void print_table(ELEVE** table)
    {
        int i;
        for(i=0;i<MAX_TAB;i++)
        {
            printf("\n case %d : %s",i,table[i]->prenom);
        }
    }
    int hash(char nom[MAX_NOM],char prenom[MAX_PRENOM])
    {
        int key=0;
        key = (nom[0]+nom[strlen(nom)-1]) * strlen(nom);
        key += ((prenom[0]+prenom[strlen(prenom)-1])*strlen(prenom));
        return (key%MAX_TAB);
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Par défaut
    Apparemment il plante lorsqu'il veut afficher la valeur de la case table[i]->prenom mais quand celle-ci est vide.
    Les cases qui possèdent une valeur, il les affiche (j'ai testé en essayant d'afficher case par case exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\n case %d : %s",i,table[1]->prenom);
    Et donc lorsqu'il veut afficher la valeur d'une case null, il fait un segmentation fault mais lorsque je test avec les noms et donc je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i;
        for(i=0;i<MAX_TAB;i++)
        {
            printf("\n case %d : %s",i,table[i]->nom);
        }
    Ca marche nickel et m'affiche <null> pour les cases null.

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Par défaut
    J'avais raison, le problème venait bien de la.
    J'ai résolu mon problème, merci pour ceux qui ont pris la peine d'essayer de m'aider.


    Bonne soirée

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

Discussions similaires

  1. plantage lors de l'affichage dans un jTextarea
    Par hamzawhy dans le forum Composants
    Réponses: 1
    Dernier message: 29/03/2014, 19h57
  2. Réponses: 1
    Dernier message: 26/07/2012, 09h38
  3. [Google Maps] Placement InfoWindow lors de son affichage
    Par anthony88 dans le forum APIs Google
    Réponses: 3
    Dernier message: 27/04/2012, 16h05
  4. Peut-on limiter les dimensions d'une image lors de son affichage ?
    Par lolymeupy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/06/2008, 18h21
  5. Affichage d'une table de hachage
    Par pymouse dans le forum Langage
    Réponses: 6
    Dernier message: 06/07/2007, 11h35

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