[C]erreur de segmentation dans une fonction

stroumpf Messages postés 292 Statut Membre -  
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
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...
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

41 réponses

lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut,

l'erreur est peut être ici.

while (p!=NULL)
{
printf("%s", p->mot);
for(j=0; j<NBRSEQ; j++)
{
AfficherOrigineListe(p->mot, seq[j]);

}
}




La condition sera toujours vraie vu que tu n'incrémentes pas
while (p!=NULL)
    {
    printf("%s", p->mot);
    for(j=0; j<NBRSEQ; j++)
    {
    AfficherOrigineListe(p->mot, seq[j]);

    }
    p=p->suivant;
}


0
stroumpf Messages postés 292 Statut Membre 2
 
merci Lami20, mais meme avec ca ca genere la mem erreur au meme emplacement :(
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
D'ailleurs il te manque une accolade (pourquoi tu utilises les accolades quand il ne faut pas?)

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]);
    p=p->suivant;
  }
}
0
stroumpf Messages postés 292 Statut Membre 2
 
le probleme reste à ce niveau
if(strcmp(p->mot, mot)!=0)


quand je fait des printf de cette facon
printf("%s\n", p->mot);
printf("%s\n",mot);
if(strcmp(p->mot, mot)!=0)
juste avant le declenchement du message d'erreur , il n'affiche pas ce message printf("%s\n", p->mot);
c'est a dire le probleme vient de p
je sais pas si c'est null ou sa manque une allocation ou autre.
je suis perdue vraiement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Ça marche comme ça?
void AfficherOrigineListe(char mot [150], Liste *p)
{
  while (p!=NULL){
    printf("%s -> %s\n", p->mot,mot);
    p=p->suivant;
  }
}
0
stroumpf Messages postés 292 Statut Membre 2
 
non
ya une erruer de segmentation ici : printf("%s -> %s\n", p->mot,mot);
je pense que le probleme vient de p->mot
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Re,

je vois ça

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];


Mais je ne vois null part que seq contient quelque chose
tu alloues la mémoire, d'accord mais après????

Pour moi seq ne pointe vers rien du tout
0
stroumpf Messages postés 292 Statut Membre 2
 
merci, c'est ce que j'ai remarque:
j'ai fait ca
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;

mais ca marche pas aussi :(
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Ton seq ne contient rien.

Tu dis ça // les tableau des toutes les Nseq


Ben, tu n'as qu'à commencer affecter le tableau seq avec tes Nseq et ensuite le traiter
0
stroumpf Messages postés 292 Statut Membre 2
 
je comprends pas Lami,
tu peux m'eclaircir un peu stp,?
merci
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Ben, quand tu fait ça
seq =(Liste **) malloc (NBRSEQ * sizeof(Liste *));

tu ne fait qu'allouer de la mémoire pour un tableau de listes
ensuite tu dois faire pointer chaque élément de ton tableau de listes vers une liste

après ça tu pourras parcourir ton tableau de listes
0
chuka Messages postés 980 Statut Membre 378
 
Salut,
ben comme dis lamij20, t'as rien dans seq.....
peut etre fait un tableau du style:
int i=0;
liste* tab[NBRSEQ];
while(i<=NBRSEQ)
{tab[i]=le_nom_de_ta_liste;
i++;}

@+
0
stroumpf Messages postés 292 Statut Membre 2
 
merci chuka
comme ca ca plante : for(i =0;i<NBRSEQ-1; i++)
{
seq[i]=p;


}
:(
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
C'est toi qui c'est mieux que nous que seq doit contenir.

C'est à toi de nous dire.
Quand tu crées seq à quoi tu penses qu'il doit contenir?
0
chuka Messages postés 980 Statut Membre 378
 
p est bien un pointeur sur liste?
déclare comme list*p ou list p?
0
stroumpf Messages postés 292 Statut Membre 2
 
chaque case de tableau va contenir une liste de mots
typedef struct L
{
    int freq;
    char mot[C_TAILLE_MOT];
    struct L *suivant;
} Liste;

voilà ^^
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Re,

comme ca ca plante : for(i =0;i<NBRSEQ-1; i++)
{
seq[i]=p;


}


En fait quand tu fait ça, tu ne fait que pointer chaque élément de tableau sur la même liste.

Pour chouka

p est un pointeur de type Liste
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
chaque case de tableau va contenir une liste de mots

Justement, où sont ces listes de mots
seq[0]=ListeDeMot1;
seq[1]=ListeDeMot2;
.
.
.
seq[NBRSEQ]=ListeDeMotNBRSEQ;
0
stroumpf Messages postés 292 Statut Membre 2
 
et donc ,
je comprends pas comment faire :(
desolé de vous gener
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Dans, ton code, où sont les listes de mots que tu veux affecter à ce tableau de liste?
0