SDA-SDC chainage simple

Fermé
Arevoire Messages postés 1 Date d'inscription dimanche 15 décembre 2013 Statut Membre Dernière intervention 20 décembre 2014 - Modifié par Arevoire le 20/12/2014 à 18:41
bonjour

je cherche à implementer une SDA au moyen d'un chainage simple.
J'ai une fonction retirer(chainage & ch) qui retourne l'element contenu en tete du chainage et supprime le maillon contenant cet élément.
j'ai ensuite defini une procedure afficheChainage(chainage ch) qui utilise retirer(ch) pour afficher les éléments du chainage.
le problème est que si j'appel afficheChainage(ch) 2fois de suite(ça a un interet pour la suite de l'exo) dans la fonction principal j'ai Erreur de segmentation (core dumped).
j'ai besoin de votre aide pour comprendre ce qui se passe .

struct maillon
{
maillon *suivant;
string elt;
};
struct chainage
{
maillon *tete;
int nb;
};

void ajouter(chainage & ch,string rep)
{
maillon *nouveau = new maillon;
nouveau->elt = rep;
nouveau->suivant = ch.tete;
ch.tete = nouveau;
ch.nb++;
}
string retirer(chainage & ch)
{
maillon *cour = ch.tete;
string res;
res = cour->elt;
ch.tete = cour->suivant;
delete(cour);
ch.nb--;
return res;
}

//dans un fichier main.cpp qui contient la fonction principal
void afficherChainage(chainage ch)
{
if(ch.nb <= 0)
{
cout<<"LE CHAINAGE EST VIDE "<<endl;
}
else
{
chainage chaine = ch;
do
{
cout<<retirer(chaine)<<endl;
}while(chaine.nb != 0);
}
}
int main()
{
chainage ch;
string val[5] = {"chaine1","chaine2","chaine3","chaine4","chaine5"};
for(int i = 0 ; i < 5 ; i++)
{
ajouter(ch,val[i]);
}
afficherChainage(ch);
cout<<"***********"<<endl;
afficherChainage(ch);
}

l'execution me donne ça
chaine5
chaine4
chaine3
chaine2
chaine1
**********
chaine5
Erreur de segmentation (core dumped)
A voir également: