Bonjour,
Je vous pose le problème.
J'ai une classe A, B, C et D. Le problème apparaît au niveau de la classe D.
A est la classe qui créer les instances des autres classes et fait les appels principaux.
Toutes les autres classes (B, C et D) possèdent un pointeur vers la classe A. Cette adresse est passée via le constructeur.
à D on passe le pointeur vers A. et via ce pointeur on récupère les adresses de B, C et D (via des appels vers A->get_b A->get_c etc..).
Lors de la création d'un objet D, les adresses pour les classes A, B et C sont correctement récupérées.
Cependant, lors de l'appel d'une des méthodes de D, ces adresses ont visiblement changées, du moins elles pointent autre part.
Ce qui est étrange:
me renvoi un truc du style:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 B::methode_de_b() { std::cout << a << " " << b << " " << c << std::endl; d.methode_de_d(); std::cout << a << " " << b << " " << c << std::endl; } D::methode_de_d() { std::cout << a << " " << b << " " << c << std::endl; }
or, le constructeur de D:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 0xAAAAAAAA 0xBBBBBBBB 0xCCCCCCCC 0xDDDDDDDD 0xEEEEEEEE 0xFFFFFFFF 0xAAAAAAAA 0xBBBBBBBB 0xCCCCCCCC
me renvoi bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 D::D( A* a ) { a = a_; b = a->get_b(); c = a->get_c(); std::cout << a << " " << b << " " << c << std::endl; }
Comment cela se fait-il ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 0xAAAAAAAA 0xBBBBBBBB 0xCCCCCCCC
Le code source complet de mon projet est inclu en pièce jointe.
Les classes et méthodes à regarder sont:
CGame::work et CPhysics::work
merci d'avance, car je coince depuis le début de la journée
source complets:
http://rapidshare.com/files/199687948/bnb.tar.bz2.html
Partager