Je souhaite stocker des couleurs dans un arbre Avl cependant à la fin du programme certaines couleurs disparaissent de mon arbre. J'ai cherché le problème et cela vient de mes fonctions rotation que j'utilise dans insertion, durant leur fonctionnement je perds certains pointeurs mais je ne vois pas comment je les perds. Est-ce que vous savez d'où vient le problème ?
Non je ne sais pas. J'utilise seulement valgrind (je ne sais pas si c'est cela un debuger) et il renvoie aucune erreur. J'ai commencé la programmation il y a moins de 4 mois.
valgrind est un memory profiler ; il te sera très utile pour détecter les erreurs de gestion de mémoire.
La première chose à faire est de compiler ton projet en ajoutant ce qu'il faut pour avoir un peu plus de warnings que le défaut. Cela signifie compiler en rajoutant les options -Wall et -Wextra. Il va falloir faire attention aux éventuels messages …
Il va aussi falloir compiler en ajoutant les informations de débogage, pour cela il faut rajouter l'option -g.
Une fois que tu as fais cela tu peux dans un premier temps lancer ton exécutable avec valgrind enl'utilisant ainsi :
En ce qui concerne le débogage à proprement parler, tu as le choix entre un gdb en interface textuelle ou des GUI comme nemiver ou DDD. L'idée est de placer un point d'arrêt dans ton programme puis de l'exécuter pas à pas en inspectant la valeur des variables …
Je suppose que tu es sous linux si tu utilises valgrind … mais peut-être pourrais-tu en dire plus sur ton environnement.
Tu sais, c'est indispensable de savoir utiliser ces outils … parce que débuguer par forum c'est vraiment très lent.
Je n'ai pas regardé en détail, mais tu devras sauver un pointeur. Et fais bien attention de l'ordre dans lequel tu fais les opérations. C'est facile de se tromper. et testes si les fils et le grand-père sont non NULL. Petit essai: sauver = noeud.pere noeud.pere = sauver.pere noeud.pere.gauche = noeud sauver.pere = noeud sauver.gauche = noeud.droit noeud.droit.pere = sauver noeud.droit = sauver Et inversement pour l'autre rotation.
Le Tout est souvent plus grand que la somme de ses parties.
valgrind est un memory profiler ; il te sera très utile pour détecter les erreurs de gestion de mémoire.
La première chose à faire est de compiler ton projet en ajoutant ce qu'il faut pour avoir un peu plus de warnings que le défaut. Cela signifie compiler en rajoutant les options -Wall et -Wextra. Il va falloir faire attention aux éventuels messages …
Il va aussi falloir compiler en ajoutant les informations de débogage, pour cela il faut rajouter l'option -g.
Une fois que tu as fais cela tu peux dans un premier temps lancer ton exécutable avec valgrind enl'utilisant ainsi :
En ce qui concerne le débogage à proprement parler, tu as le choix entre un gdb en interface textuelle ou des GUI comme nemiver ou DDD. L'idée est de placer un point d'arrêt dans ton programme puis de l'exécuter pas à pas en inspectant la valeur des variables …
Je suppose que tu es sous linux si tu utilises valgrind … mais peut-être pourrais-tu en dire plus sur ton environnement.
Tu sais, c'est indispensable de savoir utiliser ces outils … parce que débuguer par forum c'est vraiment très lent.
e suis sur linux. Je suis entrain de voir le débuguer de gdb. En fait, je sais que le problème vient de mes fonctions rotation car lorsque je ne les utilise pas tout fonctionne bien. Lorsque j'utilise votre ligne de commande pour valgrind, il me dit que je perd des malloc. Donc j'en conclu que mes fonctions rotations me font perdre des pointeurs et que je peux plus atteindre l'espace de ces pointeurs. Mais je ne vois pas à quel moment je les perds.
Veuillez bien m'excuser du manque de précision de mes paroles sur ce sujet. Je n'avais jamais fait de programmation avant.
PierrotLeFou a écrit:
Je n'ai pas regardé en détail, mais tu devras sauver un pointeur. Et fais bien attention de l'ordre dans lequel tu fais les opérations. C'est facile de se tromper. et testes si les fils et le grand-père sont non NULL. Petit essai: sauver = noeud.pere noeud.pere = sauver.pere noeud.pere.gauche = noeud sauver.pere = noeud sauver.gauche = noeud.droit noeud.droit.pere = sauver noeud.droit = sauver Et inversement pour l'autre rotation.
Oui le problème est la je n'arrive pas à sauver mon pointeur, c'est surement l'ordre de mes opérations qui doit provoquer ce problème. Je n'ai pas très bien compris ton petit essai, dans mon arbre je n'ai pas de père, j'ai seulement le fils gauche et droite.
Normalement, en tant que débutant, ça devrait te prendre environ 1H avec un debuger …
Problème avec un arbre avl
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
En recherche d'emploi.