Inserer un mot dans une table de hachage

cyrina84 Messages postés 43 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 mai 2010 - 22 sept. 2008 à 10:00
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010 - 27 sept. 2008 à 00:58
bonjour j'ai un souci dans mon code,
jai fait une fonction qui lit les mots à partir d'un texte , les stocker dans une table de hachage.
voila la structure de la table de hachage :
<!-- BEGIN TEMPLATE: bbcode_code -->
typedefstruct L
{
int freq;
char mot[50];
 
struct L *suivant;
} Liste;
 
là yaura une condition avant l'insertion du mot, on verifie s'il existe avavnt si c'est le cas on incremente la frequence du mot sinon on l'insere.
voilà le bout du code de la fonction
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
void insere_th(Liste **TableHash, constchar *mot)
{
    TableHash = (Liste **) malloc (TAILLEHASH * sizeof(Liste *));
 
    /* calcule le hash du mot */
unsignedint idx = hash_cle(mot);
Liste *p = (Liste *)malloc(sizeof(Liste));
 
/* recherche du mot */
p = TableHash[idx];
 
while(p !=NULL)
{
 
p->freq = 1; //incrementtaion de la frequence
strncpy(p->mot, mot, sizeof(p->mot));
}
 
free(TableHash);
 
}

aide svp ?
merci

4 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
22 sept. 2008 à 11:13
Salut,
Tu ne dis pas quel est ton problème...

Shell
0
Warium Messages postés 36 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 27 janvier 2010
26 sept. 2008 à 07:33
ou est ton probleme cousin????
0
cyrina84 Messages postés 43 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 mai 2010
26 sept. 2008 à 07:36
j'ai une erreur de segmentation dans cette fonction

void GenererNseq(Liste **seq, Liste **seq2)
{
    char *der;
    char *pre;
    char *buff;
    Liste *ss;
    Liste *p;
    Liste *q;
    char *mot;
    mot=p->mot;


    for(p=seq; p!=NULL; p=p->suivant)
    {
        der=GetLastWord(buff,mot);


            printf("%s", der);


    }


}
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
27 sept. 2008 à 00:58
oh mon Dieu!!
tu passe ta hash_map 'TableHash' en paramètre mais tu t'en sert jamais. apres tu te sert de ce paramèetre pour allouer un tableau que tu initialise même pas après tu vas lire des données dedans 'p TableHash[idx]' ici tu lis n'importe quoi est surement du '0xcd' en debug. la boucle while ne finira jamais car a aucun moment tu incremente 'p'. 'Liste *p (Liste *)malloc(sizeof(Liste));' ici tu leak de la mémoire.

Je crois que tu n'as pas très bien compris le c et tu devrais te replongé dans un bouquin.

Si tu veus toujours utilisé des hash map utilise ceux de la STL -> 'hash_map< type_clé, type_valeur>
0
Rejoignez-nous