Probl�me de destructeur avec Dev C++
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.
Code:
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;
} |
Voil� les variables des classes :
Extrait de Joueur.h :
Code:
1 2 3
| // variables de la classe :
char * nom; // nom du joueur
Partie * partie[5]; // tableau de pointeur sur des parties en cours |
Extrait de Partie.h :
Code:
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 :
Code:
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
} |
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"
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 ?