Bonjour,
Si j'ai bien compris le but de cette fonction est de supprimer un élément de la liste en connaissant l'élément précédent.
En reprenant chaque instruction dans l'ordre, on comprend le problème. Si on appelle n l'élément tete, n-1 le précédent et n+1 le suivant alors :
prec^.suiv := tete^.suiv;
permet de connecter n-1 sur n+1. L'élément n n'est donc plus dans la liste
tmp pointe maintenant vers n+1
L'élément n n'a plus de suivant. Notons qu'il n'appartient plus à la liste.
La fonction renvoie l'élément n qui n'a plus de suivant et qui n'est plus dans la liste.
Le problème d'adresse d’adresse surgit alors si tu tente d’accéder à la liste renvoyée par la fonction, qui n'en est pas une (un seul élément avec un pointeur nul).
Pour que ta fonction fonctionne, il faut donc qu'elle renvoi le nouvel élément de tête de la liste, donc l'élément n+1 (ou plutôt un pointeur sur cet élément). De plus il ne faut pas oublier de libérer la mémoire occupée par l'élément tete qui à été supprimé.
Partager