Bonjour,
Je vais d'abord vous mettre le code où est le problème. Le programme gère des parties et des joueurs d'échecs.
Voilà les variables des classes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <cstdlib> #include <iostream> #include "Joueur.h" #include "partie.h" using namespace std; int main(void) { Joueur Albert("albert"); Joueur Bertrand("bertrand"); Partie noob(&Albert,&Bertrand); Partie pro; pro.setJ1(&Albert); pro.setJ2(&Bertrand); cout<<(int)Albert.getpartie()[0]<<endl; cout<<(int)&noob<<endl; cout<<"bla"<<endl; pro.~Partie(); noob.~Partie(); system("PAUSE"); cout<<"bla"<<endl; return EXIT_SUCCESS; }
Extrait de Joueur.h :
Extrait de Partie.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // variables de la classe : char * nom; // nom du joueur Partie * partie[5]; // tableau de pointeur sur des parties en cours
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // variables de la classe : char * date; // Pas de classe date pour l'instant Joueur * J1; //2 joueurs distincts Joueur * J2;
Voici également le code des destructeurs de chacune des 2 classes :
Problème : le programme affiche les 2 "bla" et plante après : "Ce programme a cessé de fonctionner. Windows recherche une solution au problème"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Joueur :: ~Joueur (){ delete [] nom; for (int i = 0 ; i < 5 ; i++ ){ if (partie[i]!=NULL){ partie[i]->~Partie(); } } } Partie :: ~Partie (){ // le destructeur de partie qui détruit le tableau alloué dynamiquement et défait la liaison réciproque des objets delete [] date; for (int i = 0 ; i < 5 ; i++){ //on va ici parcourir le tableau des parties du joueur 1 a la recherche de la partie en cours if ( J1->getpartie()[i] == this ){ J1->minisetpartie(NULL,i); // une fois qu'on l'a trouvé on le supprime } } for (int i = 0 ; i < 5 ; i++){ // on fait de même pour le deuxième joueur if ( J2->getpartie()[i] == this ){ J2->minisetpartie(NULL,i); } } J1=NULL; // enfin on suprime les liens de la partie vers les joueurs 1 J2=NULL; // et 2 }
Ce problème se produit donc après l'appel aux destructeurs, pourtant il ne se produit pas si je ne les appelle pas... Pourquoi ?
Partager