Soustraction infinie
Fermé
NemesisX1
Messages postés
1
Date d'inscription
mercredi 30 octobre 2019
Statut
Membre
Dernière intervention
30 octobre 2019
-
Modifié le 30 oct. 2019 à 15:47
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 - 31 oct. 2019 à 14:01
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 - 31 oct. 2019 à 14:01
2 réponses
[Dal]
Messages postés
6193
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
4 juillet 2024
1 089
Modifié le 31 oct. 2019 à 10:20
Modifié le 31 oct. 2019 à 10:20
Salut NemesisX1,
Il y a sans doutes plusieurs problèmes qui créent le bogue que tu constates et qu'on ne peut pas reproduire parce que tu fais appel à des fonctions dans ton code que tu ne fournis pas (et que les contributeurs du forum ne vont pas redévelopper à moins d'être très motivés par ta question), et un problème peut aussi se situer dans ces fonctions.
Pour déboguer ton code, le mieux est que tu utilises un débogueur, qui te permet d'exécuter pas à pas les instructions en inspectant les valeurs de variables et de voir précisément à quel(s) moment(s) ton code ne respecte pas la logique que tu essayes d'implémenter.
Ta boucle while me paraît très compliquée, car tu veux y faire beaucoup de choses en même temps.
Une façon de simplifier les choses, quand tu n'as pas une idée très claire de tes conditions de sortie et de leur interaction, est de partir d'une simple boucle
Ton
Dal
Il y a sans doutes plusieurs problèmes qui créent le bogue que tu constates et qu'on ne peut pas reproduire parce que tu fais appel à des fonctions dans ton code que tu ne fournis pas (et que les contributeurs du forum ne vont pas redévelopper à moins d'être très motivés par ta question), et un problème peut aussi se situer dans ces fonctions.
Pour déboguer ton code, le mieux est que tu utilises un débogueur, qui te permet d'exécuter pas à pas les instructions en inspectant les valeurs de variables et de voir précisément à quel(s) moment(s) ton code ne respecte pas la logique que tu essayes d'implémenter.
Ta boucle while me paraît très compliquée, car tu veux y faire beaucoup de choses en même temps.
Une façon de simplifier les choses, quand tu n'as pas une idée très claire de tes conditions de sortie et de leur interaction, est de partir d'une simple boucle
while (1) { }et d'intégrer les sorties de la boucle avec des instructions
break;en identifiant et isolant chaque condition de sortie séparément des autres.
Ton
free(result);étant placé après ton return, il n'est jamais exécuté et occasionne une fuite mémoire. Ce n'est pas ce qui cause ton bogue, mais tu devrais corriger cela.
Dal
Tomsuper
Messages postés
1926
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
19 août 2020
358
30 oct. 2019 à 17:18
30 oct. 2019 à 17:18
Chère Ionisien,
Vérifies tes appelle à malloc.
A la ligne 17 tu fais un +10 pourquoi ?
Si tu veux passé en valeur absolue, je te conseil de faire un macro au après tes déclaration de .h
Genre #define abs(x) ((x) < 0 ? -(x) : (x))
Essai de mettre des && plutôt que des || dans ton while
Cordialement
Vérifies tes appelle à malloc.
A la ligne 17 tu fais un +10 pourquoi ?
Si tu veux passé en valeur absolue, je te conseil de faire un macro au après tes déclaration de .h
Genre #define abs(x) ((x) < 0 ? -(x) : (x))
Essai de mettre des && plutôt que des || dans ton while
Cordialement
Tomsuper
Messages postés
1926
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
19 août 2020
358
30 oct. 2019 à 22:42
30 oct. 2019 à 22:42
Ou
abs(x) ((x) < 0 ? (x × -1) : (x))
Ce qui revient au même
abs(x) ((x) < 0 ? (x × -1) : (x))
Ce qui revient au même
31 oct. 2019 à 10:25
Comme debugeur, tu as gdb qui fonctionne plutôt bien.
Pour voir si tu as des fuites mémoires, tu peux exécute ton programme avec valgrind
Je te conseille de compilé avec -g3 pour debuger et valgrindé.... oui c'est un verbe.
Je te conseille d'enlever -g3 quand tu n'en n'as plus besoin, car il alourdie l’exécutable.
Cordialement
Modifié le 31 oct. 2019 à 11:11
Puis, le faite retourné résulte dans son code, ne sert à rien.
31 oct. 2019 à 14:01
Du point de la conception, il est maladroit de mélanger les genres. Si le rôle de la fonction est de calculer le résultat d'une soustraction, son rôle ne devrait pas être de l'afficher (sauf éventuellement le temps de déboguer la fonction), car l'affichage va enfermer la fonction dans un usage particulier de celle-ci (demain, ou pourrait souhaiter afficher différemment, via une GUI, sauvegarder le résultat dans un fichier, etc.).
L'exploitation du résultat, y compris l'affichage, devrait être la responsabilité de la fonction appelante, et donc aussi la libération de la mémoire, qui ne peut avoir lieu qu'une fois que l'on sait que l'on n'a plus besoin de cette mémoire allouée par la fonction... et cela, ce n'est pas la fonction elle même qui devrait le présumer.