Liste CHaine, un big probleme!! - C - Programmation
Marsh Posté le 24-11-2007 à 00:20:41
harlem a écrit : Voila, j'ai une fonction qui ne marche pas dans ma liste chainée, c'est lorsque je veux supprimer un element de la liste. il y une erreur, voila le code source :
|
Tu ne recherches pas x dans debutListe x?
Marsh Posté le 24-11-2007 à 01:10:34
je parcours toute la liste jusqu'a que je trouve l'entier x, en faite. et debutListe c'est le pointeur sur le debut de la liste.
Marsh Posté le 24-11-2007 à 11:04:32
harlem a écrit : je parcours toute la liste jusqu'a que je trouve l'entier x, en faite. et debutListe c'est le pointeur sur le debut de la liste. |
Oui sauf que tu recherche dans l au lieu de debutliste!
Marsh Posté le 24-11-2007 à 11:58:40
1) A quoi ça sert de chercher si l'élément existe ? A rien, et ça te fait parcourir deux fois ta liste chainée si l'élément existe.
2) Tu free() le bon élément, mais par contre tu n'enlève pas le bon élément de ta liste (tu enlèves l'élément suivant l'élément que tu es sensé supprimer). Je suppose que c'est ce qui provoque l'erreur : au prochain accès, tu va accéder à de la mémoire libérée.
Marsh Posté le 24-11-2007 à 14:06:04
breizhbugs a écrit : |
Non ça c'etait une faute de frappe, c'est pas le probleme
Marsh Posté le 24-11-2007 à 14:10:30
matafan a écrit : 1) A quoi ça sert de chercher si l'élément existe ? A rien, et ça te fait parcourir deux fois ta liste chainée si l'élément existe. |
Meme si c'etais le cas, je ne vois pas pourquoi ça refuserait le "free", vu que le probleme est au niveau du free.
DOnc t'aurais fais comment?
Marsh Posté le 24-11-2007 à 14:46:10
Voila tout le code source, vous pouvez tester, toujours le probleme avec la fonction supprimer :
Code :
|
Marsh Posté le 24-11-2007 à 16:53:21
harlem a écrit : |
En fait j'ai lu un peu vite, en fait tu n'enlève pas du tout le noeud de la liste... Mais tu le free() quand même. Pourqoui ça plante sur le free ? Je ne sais pas, tu ne donnes aucun détail sur la suite d'opérations qui conduit au problème. Comme tu n'enlève pas les éléments de la liste, j'imagine que tu finis pas faire un free() sur un élément déja supprimé.
Note aussi que si tu passe un noeud * à Supprimer, tu ne pourra jamais supprimer le premier élément.
Je ferais un truc comme ça (pas testé, mais tu vois l'idée) :
Code :
|
Marsh Posté le 24-11-2007 à 17:50:17
c'est bon ça marche, en faite c'etai un probleme avec ce visual studio de m...., j'ai mis le code source sur dev++ et ça marche sans probleme. Et effectivement je n'enlever pas le noeud de la liste, j'ai tout corrigé, Merci
Marsh Posté le 23-11-2007 à 22:54:36
Voila, j'ai une fonction qui ne marche pas dans ma liste chainée, c'est lorsque je veux supprimer un element de la liste. il y une erreur, voila le code source :
Voila après avoir vérifié que le noeud existe dans la liste, je le cherche. et je l'affecte à un pointeur temporaire, puis j'accroche l'element suivant et je fais un "free" de l'element a supprimer.
Mais j'ai ce message d'erreur : "Heap corruption detected : after normal block...CRT detected that the application wrote to memory after end of heap buffer...
Voila aidez moi comment faire pour supprimer un element de la liste.
Message édité par harlem le 24-11-2007 à 14:02:50
---------------
fallout 3 NEUF : http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0