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 ?