|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : octobre 2008 Messages : 136 ![]() |
Bonjour,
J'ai une liste chaînée contenant des noms de villes. Ces villes sont rangées dans la liste selon un critère : elles ont une sous-chaine commune. Je veux faire un tri de la liste chaînée d'abord sur les noms quoi commencent par la sous-chaîne puis les noms qui contiennent la sous-chaîne. Un exemple sera peut-être plus parlant : La liste de ville pour la sous-chaîne "TOURS" contient : Chambray-Les-Tours, Joue-Les-Tours, Tours, Tours-en-Savoie. Je veux que ma liste triée soit : Tours, Tours-en-Savoie, Chambray-Les-Tours, Joué-les-Tours. Je trie au fur et à mesure des insertions. Mon problème : l'insertion avec tri se passe sans problème mais le parcours de la liste complète après toutes les insertions conduit à un crash donc il doit y avoir un problème au niveau de l'insertion mais je n'arrive pas à l'identifier. Si quelqu'un a une idée, MERCI !!!! Voici mon code : Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() ![]() |
Bonjour,
Le mieux, pour savoir pourquoi ça plante, c'est d'utiliser un débogueur. Sous Unices, valgrind te permettra de localiser les accès mémoires douteux, tandis qu'avec gdb, tu pourras analyser efficacement le contenu de tes données au fur et à mesure de l'exécution. En l'état, le code source de ta fonction est quand même assez long (m'est avis qu'on peut faire plus simple). Personnellement, j'ai testé sur les entrées que tu as données, le résultat est erroné (liste incomplète), mais les accès mémoires se font apparemment correctement. Bonne journée !
__________________
Récursivité en C : épidémie ou hérésie ? "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman |
|
10
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() Inscription : octobre 2008 Messages : 136 ![]() |
Citation:
J'ai refait tourner le code avec une liste courte et j'ai trouvé un premier oubli. J'ai modifié le code dans le post original avec cette correction. Le problème du debugger c'est que en exécution pas à pas sur une petite liste ça fonctionne mais dès que je passe à un code plus complet, ça plante. |
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() |
Je pense que tu devrais décomposer ton code un peu plus: Te faire une fonction pour sortir un élément de la liste, et une pour l'insérer. Vérifier comment ces fonctions se comportent au début, au milieu et à la fin de la liste...
Et aussi, mettre la comparaison dans une fonction à part.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#5 | |
|
Nouveau Membre du Club
![]() Inscription : octobre 2008 Messages : 136 ![]() |
Citation:
J'ai mis ça de côté pour l'instant, je reviendrai sur ce code plus tard. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com