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 : 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;   
}
Voilà les variables des classes :

Extrait de Joueur.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
Extrait de Partie.h :

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 :

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
 
}
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 ?