Segmentation fault

safasahnoun -  
loupius Messages postés 789 Statut Membre -
Bonjour,
J'ai fait un programme et lors de la compilation il me dit segmentation fault
voici la parti ou j' ai le problème:
typedef Pokemon p;
typedef struct maillon *Pokemon_list;
struct maillon {
p donnee;
Pokemon_list suivant;
};

//cette fonction va ajouter un pokemon (type que j'ai construit ) dans une liste :
Pokemon_list add(Pokemon_list liste, Pokemon p)
{Pokemon_list nouvelliste = malloc(sizeof(Pokemon_list));
nouvelliste->donnee = p;
nouvelliste->suivant = liste;
return nouvelliste;
}
//affichage
void get_pokemons_list(Pokemon_list a){
if (a== NULL) {printf ("liste vide");}
printf("[");
while (a->suivant != NULL)
{printf ("%s,",a->donnee.Nom);
a=a->suivant;}
printf("%s]",a->donnee.Nom);}

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Il te manque un else :

void get_pokemons_list(Pokemon_list a)
{
    if (a==NULL)
        printf ("liste vide");
    else
    {
        printf("[");
        while (a->suivant != NULL)
        {
            printf ("%s,",a->donnee.Nom);
            a=a->suivant;
        }
        printf("%s]",a->donnee.Nom);
    }
}

On doit aussi pouvoir faire plus simplement :

void get_pokemons_list(Pokemon_list a)
{
    printf("[");
    for (;a!=NULL;a=a->suivant)
        printf ("%s,",a->donnee.Nom);
    printf("]");
}
0
safasahnoun
 
j' ai corrigé mais le probmème de segmentation rest !
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Il se peut alors que ce soit a->donnee qui vaille NULL et donc donnee.Nom qui plante, mais là c'est que ton code est mal fait au moment tu créés ta liste :

void get_pokemons_list(Pokemon_list a)
{
    printf("[");
    for (;a!=NULL;a=a->suivant)
        printf("%s,",(a->donnee==NULL) ? "NULL" : a->donnee.Nom);
    printf("]");
}
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
nouvelliste->donnee = p;
nouvelliste->donnee est de type Pokemon.
Où est réalisée l'allocation ? A moins que tu souhaites faire pointer nouvelliste->donnee vers p, mais dans ce cas, il faut mettre un type pointeur.
0
loupius Messages postés 789 Statut Membre 148
 
... lors de la compilation il me dit segmentation fault
Ce ne serait pas plutôt à l'exécution ? Sinon, que dit le compilateur ?

voici la parti ou j' ai le problème
Lorsqu'une erreur de programme entraîne une erreur de segmentation (99/100 un pointeur en galère (mal initialisé, utilisé après delete, ...)), il est loin d'être rare que la manifestation de cette erreur se fasse plus tard, voir beaucoup plus tard, voir pas du tout !
Bonne continuation.
0