
Envoyé par
jeremysup
Enfin je n'ai plus de warning le programme ne plante pas, par contre la fonction printChain ne fonctionne pas lol
Déjà il serait bon de tester la validité des arguments avant d'utiliser (ceux de tes fonctions) quoi que se soit, cela évite bien des surprises pendant le fonctionnement du programme.
Ensuite, dans la boucle de ton main, à la fin (mais dedans) de la condition
met un break; sinon tu ne sortira jamais de la boucle donc normal que ta fonction d'impression ne fonctionne pas car elle ne peut être appelée
Pour finir, listBegin est toujours à la valeur NULL donc même si le programme entre dans ta fonction printChain, elle commencera même pas à parcourir ta liste car ton argument n'est pas valide !
Mais pourquoi ? Hé bien dans ta fonction:
int newElements (list * f_listNew, float f_val);
tu modifies le pointeur mais pour que ca prenne effet en dehors de la fonction, il faut utiliser un pointeur de pointeur pour que ce soit correct et donc passer l'adresse de ton pointeur lors de l'appel de la fonction soit ta fonction corrigée:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| //Create new Elements and initialize it
int newElements (list ** f_listNew, float f_val)
{
*f_listNew = malloc (sizeof (* f_listNew));
if (*f_listNew != NULL)
{
(*f_listNew)->val = f_val;
(*f_listNew)->ChainListNext = NULL;
(*f_listNew)->ChainListBefore = NULL;
}
return 0;
} |
et son appel:
newElements(& listNew, nb);
Autre chose qui me perturbe un peu, si dans tes fonctions tu retournes systématiquement zéro, ne fait pas renvoyer de valeur à tes fonctions, ca ne sert strictement à rien dans ton cas, sauf si tu changes et que tu retournes des codes d'erreurs, là ok, sinon met void au lieu de int !
Encore autre chose, n'oublies surtout pas de faire une fonction de libération de ta liste chaînée que tu appeleras avant la fin de ton programme, il faut toujours libérer ce qu'on alloue dynamiquement ... une bonne habitude à prendre le plus tôt possible
Partager