[C]erreur de segmentation dans une fonction
Fermé
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
-
12 oct. 2008 à 20:06
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 12 oct. 2008 à 22:49
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 12 oct. 2008 à 22:49
A voir également:
- [C]erreur de segmentation dans une fonction
- Erreur 0x80070643 - Accueil - Windows
- Fonction si et - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3005 france tv - Forum TV & Vidéo
41 réponses
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 21:09
12 oct. 2008 à 21:09
voila
je les rempli a laide de la fonction GenNseq
je les rempli a laide de la fonction GenNseq
int main(int argc, char *argv[]) { Liste *seq2=NULL; Liste **seq=NULL; Liste *p; int j; int res=0; FILE *fdesc=fopen(FNAME,"r"); Liste *TableHash[TAILLEHASH]; Liste *p1; int i; for (i = 0; i < TAILLEHASH; ++i) { TableHash[i] = NULL; } if ( fdesc ) { char buff[BUFFSIZE]; char prec[BUFFSIZE]; printf("Parsing file"); while ( get_word(fdesc,prec,BUFFSIZE) ) { printf("."); while ( get_word(fdesc, buff, BUFFSIZE) ) { //printf("b2"); //printf("%s %s\n",prec,buff); char s3[BUFFSIZE * 2]; sprintf(s3, "%s %s", prec, buff); puts(s3); strncpy( prec,buff,BUFFSIZE); insere_th(TableHash,s3); } fseek(fdesc, 1, SEEK_CUR); } } printf("la table de hachage avant le filtrage"); dump_table(TableHash); res = numligne(fdesc); printf("%d\n", res); //printf("%d\n", res); //printf("aaaaaaaaaaaaaaaaaaaaaaaa"); clean_table(TableHash, res); printf("la table de hachage filtrée\n"); dump_table(TableHash); for (i=0;i<TAILLEHASH;++i) { if (TableHash[i] != NULL) { for (p1=TableHash[i];p1!=NULL;p1=p1->suivant) { seq2=InsertionEnTete(seq2, p1->freq, p1->mot); } } } seq =(Liste **) malloc (NBRSEQ * sizeof(Liste *)); // les tableau des toutes les Nseq for(i =0;i<NBRSEQ-1; i++) { seq[i]=NULL; } seq[0]=seq2; for(i=1; i<NBRSEQ-1; i++) { seq[i]=GenNseq(seq[i-1], seq2); AfficherListe(seq[i]); seq[i]=filtrer_liste(seq[i]); AfficherListe(seq[i]); if (TailleListe(seq[i]) == 0) // si on arrive plus a generer on sort de boucle break; //elagage(seq[i], &(seq[i-1])); } for (j=1; j <= i; j++){ printf("\nla liste des %d seq elagues:\n----------------------------------\n",(j+1)); //AfficherListe(seq[j]); elagage(seq[j], &(seq[j-1])); AfficherListe(seq[j-1]); } AfficherListe(seq[i]); for(i=0; i<NBRSEQ; i++){ //GenRA(seq[i], res); p=seq[i]; while (p!=NULL){ printf("%s", p->mot); for(j=0; j<NBRSEQ - 1; j++) AfficherOrigineListe(p->mot, seq[j], res); p=p->suivant; } } // free(seq); free(TableHash); return 0; }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 21:12
12 oct. 2008 à 21:12
Cet appel de fonction AfficherListe(seq[i]);
affiche le résultat désiré?!
affiche le résultat désiré?!
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 21:14
12 oct. 2008 à 21:14
elle afiche la liste qui est dans la cese i du tableau seq
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 21:16
12 oct. 2008 à 21:16
Je ne comprends plus rien
Dans ton message initial tu as la fonction avec 2 paramètres
void AfficherOrigineListe(char mot [150], Liste *p)
et dans ton dernier code je vois que tu lui passe 3 arguments
AfficherOrigineListe(p->mot, seq[j], res);
Décide toi.
Dans ton message initial tu as la fonction avec 2 paramètres
void AfficherOrigineListe(char mot [150], Liste *p)
et dans ton dernier code je vois que tu lui passe 3 arguments
AfficherOrigineListe(p->mot, seq[j], res);
Décide toi.
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 21:17
12 oct. 2008 à 21:17
AfficherOrigineListe(p->mot, seq[j], res);
comme ca car je vais calculer le support qui va utiliser res : nombre de ligne
mais le mem probleme dans les 2 cas lami
comme ca car je vais calculer le support qui va utiliser res : nombre de ligne
mais le mem probleme dans les 2 cas lami
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 21:20
12 oct. 2008 à 21:20
Mais ta fonction est conçue avec 2 paramètres seulement.
Tu ne peux pas passer 3 arguments.
Tu ne peux pas passer 3 arguments.
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
12 oct. 2008 à 21:22
12 oct. 2008 à 21:22
Si tu as déclaré :
liste *a;
a=(list*)mallac(1*sizeof(list));
a->freq=ta_valeur;
a->mot="ton_mot";
a->suivant=? //la je sais pas comment tu fais....
normalement si tu as declaré
liste* tab[NBRSEQ];
int i=0;
tab[i]=a; //ca devrait marcher....
Comment tu remplis les valeur de liste??
liste *a;
a=(list*)mallac(1*sizeof(list));
a->freq=ta_valeur;
a->mot="ton_mot";
a->suivant=? //la je sais pas comment tu fais....
normalement si tu as declaré
liste* tab[NBRSEQ];
int i=0;
tab[i]=a; //ca devrait marcher....
Comment tu remplis les valeur de liste??
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 21:26
12 oct. 2008 à 21:26
regarde la fonction GenNseq: c'est là que je construit mes listes chainees
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 21:28
12 oct. 2008 à 21:28
voilà
snprintf(pCourant->mot, C_TAILLE_MOT, "%s%s", seq->mot, strpbrk(seq2->mot, " ,.-;")); printf("%s", pCourant->mot); pCourant->freq = frequence(pCourant->mot); //printf("%d", pCourant->freq); pCourant->suivant = pNouvelleListe; pNouvelleListe = pCourant;
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
12 oct. 2008 à 21:28
12 oct. 2008 à 21:28
Je t'ai demander si l'appel pour la fonction qui affiche ton tableau de liste fonctionne
Oui ou non?
Affiche ici le résultat
Oui ou non?
Affiche ici le résultat
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
12 oct. 2008 à 21:30
12 oct. 2008 à 21:30
oui il fonctionne nikel
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
12 oct. 2008 à 21:32
12 oct. 2008 à 21:32
je vois bien mes liste chianee: en fait mes phrases
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 21:22
12 oct. 2008 à 21:22
oui mais jai réparé ca
voila
voila
void AfficherOrigineListe(char mot [150], Liste *p,int res) { char s3[150]; float support; float confiance; while (p!=NULL) { printf("les mots"); // printf("%s\n", p->mot); printf("%s\n",mot); if(strcmp(p->mot, mot)!=0) { printf("%s", p->mot); printf("->"); printf("%s\n", mot); sprintf(s3, "%s %s", p->mot, mot); printf("%s\n",s3); printf("%d\n", res); printf("%d", frequence(s3)); support=frequence(s3)/(float)(res); //ça serait pas n+1 le nbre ligne confiance =(float)(support)/(float)((float)(p->freq)/(float)(res)); //printf(" / %i ",p->freq); printf("\tsupport : %f\n", support); printf("\tConfiance : %f\n", confiance ); } p=p->suivant; } }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 21:33
12 oct. 2008 à 21:33
Alors, essaie juste un seule appel, sans boucle
AfficherOrigineListe(p->mot, seq[0], res);
et affiche ici ce que tu obtiens (il ne suffit pas de dire que ça fonctionne nikel, comme je suis un peu parano ;-) j'ai besoin d'interpréter moi même le résultat )
AfficherOrigineListe(p->mot, seq[0], res);
et affiche ici ce que tu obtiens (il ne suffit pas de dire que ça fonctionne nikel, comme je suis un peu parano ;-) j'ai besoin d'interpréter moi même le résultat )
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 21:40
12 oct. 2008 à 21:40
comme ca il se plante
bizarre non?
printf("voila la liste \n"); while (p!=NULL){ AfficherOrigineListe(p->mot, seq[0], res); p=p->suivant; }
bizarre non?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 21:46
12 oct. 2008 à 21:46
Essaie juste ça
et affiche le résultat (il ne suffit pas de me dire qu'il plante)
printf("%s, %s\n",seq[0]->mot,seq[1]->mot);
et affiche le résultat (il ne suffit pas de me dire qu'il plante)
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 21:51
12 oct. 2008 à 21:51
ya rien
la liste des sequence :
ca plante
il naffiche rien
la liste des sequence :
ca plante
il naffiche rien
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 21:57
12 oct. 2008 à 21:57
Alors affiche le résultat de
AfficherListe(seq[0]); AfficherListe(seq[1]);
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 22:03
12 oct. 2008 à 22:03
seq[0]et seq[1] sont vides donc rien à afficher mais des [4] et seq [8] sont pas vide donc l'affichage donne:
<il est beau he is nice ,3>
<bonjour les amis du monde good morning friends of world, 3>
<il est beau he is nice ,3>
<bonjour les amis du monde good morning friends of world, 3>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 22:05
12 oct. 2008 à 22:05
Alors, fait
AfficherOrigineListe(seq[4]->mot, seq[8], res);
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 22:13
12 oct. 2008 à 22:13
voila les listes:
il est beau he is nice
bonjour les mais du monde good morning friends of world->il est beau he is nice
bonjour les mais du monde good morning friends of world il est beau he is nice
support: 0.1427
confiance : 0.333
voila
pas d'erreur de segmentation ^^
il est beau he is nice
bonjour les mais du monde good morning friends of world->il est beau he is nice
bonjour les mais du monde good morning friends of world il est beau he is nice
support: 0.1427
confiance : 0.333
voila
pas d'erreur de segmentation ^^
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 22:18
12 oct. 2008 à 22:18
Ok, donc il faut écrire la fonction d'une manière qu'il ne traite que les éléments du tableau seq qui pointe vers quelque chose.
Tu as en fait l'erreur de segmentation puisque seq[0] par exemple est NULL depuis le début.
Au moins on a localisé le problème ;-)
Je ne peux plus rester.
A demain si jamais il n'y a pas d'autre personne pour prendre le relais ;-)
Tu as en fait l'erreur de segmentation puisque seq[0] par exemple est NULL depuis le début.
Au moins on a localisé le problème ;-)
Je ne peux plus rester.
A demain si jamais il n'y a pas d'autre personne pour prendre le relais ;-)
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 22:21
12 oct. 2008 à 22:21
d'accord bonne nuit
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 22:26
12 oct. 2008 à 22:26
En fait je pense que tu dois écrire
for(i=0; i<NBRSEQ; i++){ if(seq[i] != NULL){ p=seq[i]; while (p!=NULL){ printf("%s", p->mot); for(j=0; j<NBRSEQ - 1; j++) if(seq[j] != NULL) AfficherOrigineListe(p->mot, seq[j], res); p=p->suivant; } } }
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 22:31
12 oct. 2008 à 22:31
merci, mais le meme problem persiste encore
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 22:34
12 oct. 2008 à 22:34
Affiche
printf("%p\n",seq[0]);
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 22:36
12 oct. 2008 à 22:36
00000000
le probleme Lami n'ets pas dans la 1ere case qui est vide, mais je pense la derniere ou bien au milieu mais certainement pas la 1ere
le probleme Lami n'ets pas dans la 1ere case qui est vide, mais je pense la derniere ou bien au milieu mais certainement pas la 1ere
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2008 à 22:40
12 oct. 2008 à 22:40
Les conditions if que j'ai mis c'est justement pour agir seulement pour les listes valides.
Utilise la fonction sans res pour voir.
Donc modifie le prototype et l'appel
Utilise la fonction sans res pour voir.
Donc modifie le prototype et l'appel
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
12 oct. 2008 à 22:48
12 oct. 2008 à 22:48
peut etre le probleme au sein de la liste meme dans la meme case .
tu pense?
tu pense?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
12 oct. 2008 à 22:49
12 oct. 2008 à 22:49
Envoi le code complet et le fichier de test.
Je verrai ça demain ;-)
La réponse tu l'auras ici.
Je verrai ça demain ;-)
La réponse tu l'auras ici.