[C] probleme liste chainée

Fermé
Laurent - 14 févr. 2005 à 16:07
 Laurent - 14 févr. 2005 à 16:19
Bonjour

j'ai essayé de créer une liste chainée d'entier numérique a partir de procedure ajout, suppr, affiche... et je ne comprend pas mon erreur:

typedef struct couple
{
int num;
struct couple *suiv;
};

typedef struct couple Tcouple,*Tliste;

void ajout(Tliste l,int x)
{
Tliste s; /* creation dun pointeur vers liste */
s=l; /* s pointe vers l */
while(s!=NULL) s=s->suiv; /* positionnement de s sur le dernier maillon */
s=(Tliste)malloc(sizeof(Tcouple)); /* allocation de l'espace memoire pour la nouvelle valeur */
s->num=x; /* affectation de x a s->num */
s->suiv=NULL;
}

voila mon probleme: la procedure ajout marche, mé uniquement dans la procedure, comme si jtravaillais sur les valeurs et non pas sur l'adresse..
jviens de penser à une chose, le programme devrait plutot ressembler a cela:

void ajout(Tliste l,int x)
{
Tliste s;
s=l;
if(s==NULL)
{
s=(Tliste)malloc(sizeof(Tcouple));
s->num=x;
s->suiv=NULL;
}
else
{
while(s->suiv!=NULL) s=s->suiv;
s->suiv=(Tliste)malloc(sizeof(Tcouple));
s->suiv->num=x;
s->suiv->suiv=NULL;
}
}

pour construire la liaison entre le dernier maillon et le nouveau maillon, mais meme resultat...

merci de m'aider SVP
++

1 réponse

rebonjour
g compris l'erreur:
qd jfais passé l'adresse de la liste l au premier passage elle est nulle et donc le malloc cré une adresse qui n'est pas relié au pointeur l que je fais passer en parametre, donc le resultat est que la liste l ne contient toujours rien...
j'ai donc rajouté ceci dans mon main:
printf("val?\n");
scanf("%d",&x);
if(l==NULL)
{
l=(Tliste)malloc(sizeof(Tcouple));
l->num=x;
l->suiv=NULL;
}
else ajout(l,x);

ajout dans la 2e version du message précédent
c la seule facon de procéder ou bien je me complique la vie?

merci de votre écoute ^^
0