URL: https://linuxfr.org/forums/programmation-c--2/posts/bug-gcc-ou-je-ny-comprend-plus-rien Title: bug gcc ? ou je n'y comprend plus rien ... Authors: Mildred Date: 2006年09月02日T02:35:31+02:00 Tags: Score: 0 Bonsoir, J'ai un drôle de truc qui m'arrive dans mon projet ... Lorsque j'utilise un débuger pour voir ce qui se passe, lorsque l'instruction `return NULL;` est exécutée à la fin d'une fonction, j'ai un NULL qui vient se mettre quelque part dans ma structure de donnée. Je n'y comprend rien. J'ai bien vérifié, du coté où on appelle la fonction, le résultat arrive dans une variable toute neuve, je n'y comprend rien. je me demande si ce ne serait pas un bug de GCC ... mais cela ne semble pas être le cas car que ce soit avec GCC-4.0 ou GCC-3.4 la même chose se produit. ----- Mon projet (que j'appelle moon pour le moment, pas très original, je sais) consiste à créer un langage de programmation dans le style lisp/scheme mais pas exactement pareil (sinon, je prendrait ce qui existe). Pour cela, j'utilise le garbage collector Hans Boehm [2] mais je ne pense pas que le problème vienne de là. Ce qui se passe, c'est que lors de l'exécution, j'ai une pile d'objets qui permet notament à un objet enfant de parcourir tous ses parents à la recherche de la définition d'une variable. Ainsi, certains objets sont dotés d'un environnement, c'est à dire globalement un pointeur `void*` et un pointeur sur une fonction qui doit permettre de dire si la variable recherchée est définie dans cet environement. Je ne sais vraiment pas quoi faire, je ne vois pas bien quelle pourrait être la cause de tout ça. Et surtout je ne vous pas comment l'instruction return pour modifier des données dans le tas, de plus, logiquement, la valeur de retour ne passe que dans des registres [3] (du moins sur une architecture x86). Si quelqu'un veut voir ma source, c'est par là [1] ou par là [4] (bazaar-ng). Pour compiler, il faut cmake [5] et le bon garbage collector [2]. Ensuite il suffit de lancer la commande `cmake .` pour configurer la sources puis `make` pour construire l'exécutable. Il suffit de lancer la commande `./moon test.moon` pour que l'erreur se produise. Le fichier `.kdbgrc.moon` contient ce qu'il faut pour lancer kdbg. Pour bien la voir, il faut lancer un débuger et metre un point d'arrêt dans la fonction moon_environment_resolve dans moonlib/environment.c [6]. les deux premières fois que le programme est arrêté, relancer l'exécution, c'est à la 3e fois qu'on peut continuer en pas à pas et voir que l'instruction `return NULL` met `NULL` dans `parents->stack`. Pour info, la fonction appelante, est moon_resolve dans le fichier `moonlib/core-inline.h` [7] je ne vous demande pas de réparer complètement mon code, mais juste de m'aider à voir où il pourrait y avoir un truc qui cloche ... car je ne vois pas du tout :( Merci de toute aide Mildred -- [1] [http://bzr.mildred632.free.fr/viewsource/Projects/moon-c-gc](http://bzr.mildred632.free.fr/viewsource/Projects/moon-c-gc) [2] [http://www.hpl.hp.com/personal/Hans_Boehm/gc/](http://www.hpl.hp.com/personal/Hans_Boehm/gc/) [3] [http://en.wikipedia.org/wiki/Calling_convention](http://en.wikipedia.org/wiki/Calling_convention) [4] [http://bzr.mildred632.free.fr/Projects/moon-c-gc/moon-src.ta(...)](http://bzr.mildred632.free.fr/Projects/moon-c-gc/moon-src.tar.bz2) [5] [http://cmake.org](http://cmake.org) [6] [http://bzr.mildred632.free.fr/viewsource/Projects/moon-c-gc/(...)](http://bzr.mildred632.free.fr/viewsource/Projects/moon-c-gc/moonlib/environment.c?action=view) [7] [http://bzr.mildred632.free.fr/viewsource/Projects/moon-c-gc/(...)](http://bzr.mildred632.free.fr/viewsource/Projects/moon-c-gc/moonlib/core-inline.h?action=view)

AltStyle によって変換されたページ (->オリジナル) /