tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017
-
2 août 2009 à 00:23
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017
-
3 août 2009 à 10:16
J'ai écrit un petit programme qui appelle une procédure qui ajoute des éléments à une liste chainée simple. Mon problème c'est que la liste n'est pas modifiée et à chaque appel de la procédure je trouve la liste vide. Ci-dessous mon programme. Si quelqu'un peut m'aider à voir où se trouve le problème!
p = tete;
if (p==NULL) {
printf("Tete de la liste");
tete= malloc(sizeof(noeud));
tete->info = x ;
tete->suivant = NULL;
printf("%s%d%s\n","Ajout de ", x, " à la tête");
}
else {
printf("%s%d%s\n","Ajout de ", x, " à la liste");
while (p->suivant != NULL)
{
p = p->suivant ;
}
p1=malloc(sizeof(noeud));;
p1->info = x ;
p1->suivant = NULL ;
p->suivant = p1;
}
}
int main()
{
int v;
ptNoeud q = NULL;
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 2 août 2009 à 09:52
Salut,
C'est tout à fait normal, c'est une histoire de portée des variable. Dans le main tu initialise ta variable q à NULL, or rien ne la modifie et son adresse n'est jamais passée afin qu'elle soit modifiée par effet de bord. Bref, deux solutions :
- Soit tu passe l'adresse de ton pointeur à ta fonction d'ajout. C'est très moche les effets de bords saiLEmal.
- Soit tu fait retourner a ta fonction d'ajout le pointeur vers le début de la liste. De cette manière, si tu lui passe NULL elle vas te retourner l'adresse du nouvel elle, sinon elle retourne ce qu'on lui a passé comme tête.
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 3 août 2009 à 10:16
Merci, oui je crois que le fait de faire une procédure d'ajout ne me laisse pas la possibilité de retourner quoi que ce soit, je vais donc transformer ma procédure en fonction qui retourne la tête de la liste.
*************************************
No dejes para mañana lo que puedes hacer hoy