[C]erreur de segmentation dans une fonction
stroumpf
Messages postés
289
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
bonjour à tous
j'ai une erreur de segmentation dans une focntion
voilà l'idée de base ; on creer une fonction du genre : afficheOrigineavecListe(element de ta liste (genre ab), et une liste avec lekel il faut tout afficher)
{ tant que ta liste nest pas vide si lelement de ta liste que tu parcours et different de Origine, alors tu afifche Origine->element et j'appel cette fonction genre avec : ab, et tab[0] pui ab et tab[1], etc...
j'attends vos reponse
j'ai une erreur de segmentation dans une focntion
voilà l'idée de base ; on creer une fonction du genre : afficheOrigineavecListe(element de ta liste (genre ab), et une liste avec lekel il faut tout afficher)
{ tant que ta liste nest pas vide si lelement de ta liste que tu parcours et different de Origine, alors tu afifche Origine->element et j'appel cette fonction genre avec : ab, et tab[0] pui ab et tab[1], etc...
seq =(Liste **) malloc (NBRSEQ * sizeof(Liste *)); // les tableau des toutes les Nseq 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; j++) { AfficherOrigineListe(p->mot, seq[j]); } } void AfficherOrigineListe(char mot [150], Liste *p) { while (p!=NULL) { // printf("%s", p->mot); if(strcmp(p->mot, mot)!=0)_____________________ici l'erreur_____________________ { printf("%s", p->mot); printf("->"); printf("%s", mot); // } p=p->suivant; } }
j'attends vos reponse
A voir également:
- [C]erreur de segmentation dans une fonction
- Fonction si et - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Excel : Remplir une cellule en fonction d'une autre ✓ - Forum Excel
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Une erreur de communication est détectée dans le module de sécurité ✓ - Forum TNT / Satellite / Réception
41 réponses
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; }
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.
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
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??
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; } }
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 )
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)
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>
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 ^^
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 ;-)
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; } } }
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