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:

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;
}
me renvoi un truc du style:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
0xAAAAAAAA 0xBBBBBBBB 0xCCCCCCCC
0xDDDDDDDD 0xEEEEEEEE 0xFFFFFFFF
0xAAAAAAAA 0xBBBBBBBB 0xCCCCCCCC
or, le constructeur de D:

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;
}
me renvoi bien

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
0xAAAAAAAA 0xBBBBBBBB 0xCCCCCCCC
Comment cela se fait-il ?

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