Segmentation fault
safasahnoun
-
loupius Messages postés 789 Statut Membre -
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);}
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
Il te manque un else :
On doit aussi pouvoir faire plus simplement :
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("]");
}
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.
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.
... 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.
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.
void get_pokemons_list(Pokemon_list a) { printf("["); for (;a!=NULL;a=a->suivant) printf("%s,",(a->donnee==NULL) ? "NULL" : a->donnee.Nom); printf("]"); }