Dépassement de mémoire ? Ecriture dans un objet x involontaire
Bonjour,
je dois (à mon grand désespoir) rendre un TP en C++, et on a du mal à être copain tous les deux.
Mon code (.h) :
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 26 27 28 29 30 31 32 33 34 35 36 37
|
class Case
{
public:
bool Occupe;
int IdentifiantJoueur;
double Coefficient;
int Position;
stack<int> EtatsForUndo;
Case();
Case(bool oqp, int idJoueur, double coef, int pos);
};
class Virus
{
private:
int TaillePlateau;
int CalculerPossession(int color);
public:
Case *plateau[];
Virus(int taille);
bool VerifierValiditeCoup(int x, int y, int color);
int AlphaBeta(int depth, int alpha, int beta, int color, list<Case> & meilleursCoups);
void PlayMove(Case c, int color, bool savePositions);
void UndoMove();
void FindLegalMoves(list<Case> & moves, int color);
int Evaluate(int color);
void ComblerEspaces(int color);
int GetTaillePlateau();
}; |
Code bis (.cpp)
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 26 27 28 29 30 31
|
Case::Case(bool oqp, int idJoueur, double coef, int pos)
:Occupe(oqp),IdentifiantJoueur(idJoueur),Coefficient(coef), Position(pos)
{
}
Case::Case()
:Occupe(false), IdentifiantJoueur(0), Coefficient(1.0), Position(0)
{
}
Virus::Virus(int taille)
:TaillePlateau(taille)
{
*plateau = new Case[TaillePlateau*TaillePlateau];
for(int i = 0; i < TaillePlateau*TaillePlateau; i++)
plateau[i] = new Case(false, VIDE, 1.0, i);
plateau[0] = new Case(true, HUMAIN, 1.0, 0);
plateau[TaillePlateau-1] = new Case(true, IA, 1.0, TaillePlateau-1);
plateau[TaillePlateau*TaillePlateau -1] = new Case(true, HUMAIN, 1.0, TaillePlateau*TaillePlateau -1);
plateau[TaillePlateau*TaillePlateau -TaillePlateau] = new Case(true, IA, 1.0, TaillePlateau*TaillePlateau -TaillePlateau);
}
... |
J'initialise la taille du plateau à 7.
Résultat, quand j'initialise chaque case de mon tableau, rendu à partir de 43, il s'amuse à me changer mes valeurs à l'indice 1 du tableau en même temps
i =42
Code:
plateau[1] 0x00343c18 {Occupe=false IdentifiantJoueur=0 Coefficient=1.0000000000000000 ...} Case *
i=43
Code:
plateau[1] 0x00343c18 {Occupe=true IdentifiantJoueur=0 Coefficient=1.0000000000000000 ...} Case *
i=44
Code:
plateau[1] 0x00343c18 {Occupe=true IdentifiantJoueur=3443232 Coefficient=1.0000000000000000 ...} Case *
Ces valeurs barbares cassent le fonctionnement de mon programme de TP, et je ne comprends pas pourquoi cela se passe comme ça...
Merci pour votre aide !