[C++] réassignement de pointeur
Résolu
Sigel
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai un problème dans le carde d'un projet de jeu d'echec. Lorsque j'essaie de réassigner un pointeur mon programme plante. Mon code est de ce genre:
(avec Piece classe parente de Pion bien sur)
jusque là tout va bien...j'initialise tout le tableau mais seule cette partie m'intéresse et ensuite
la deuxième partie fait planté le programme lorsque je tente d'accéder aux pointeurs. Je n'utilise pas de référence donc je devrait pouvoir réassigner mes pointeurs sur des objets d'un même type (à moins que j'ai mal compris la théorie).
Je serai reconnaissant si quelqu'un pouvais me dire ce que je fais faux.
Merci d'avance
j'ai un problème dans le carde d'un projet de jeu d'echec. Lorsque j'essaie de réassigner un pointeur mon programme plante. Mon code est de ce genre:
Piece* m_chessboard[8][8]; m_chessboard[0][1] = new Pion(0,1,"blanc"); m_chessboard[0][2] = NULL;
(avec Piece classe parente de Pion bien sur)
jusque là tout va bien...j'initialise tout le tableau mais seule cette partie m'intéresse et ensuite
m_chessboard[0][2]=m_chessboard[0][1]; m_chessboard[0][1]=NULL;
la deuxième partie fait planté le programme lorsque je tente d'accéder aux pointeurs. Je n'utilise pas de référence donc je devrait pouvoir réassigner mes pointeurs sur des objets d'un même type (à moins que j'ai mal compris la théorie).
Je serai reconnaissant si quelqu'un pouvais me dire ce que je fais faux.
Merci d'avance
A voir également:
- [C++] réassignement de pointeur
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
- Pointeur laser publicitaire ✓ - Forum Loisirs / Divertissements
- Pointeur souris avec rond de chargement qui clignote sans arrêts ✓ - Forum Windows
5 réponses
voilà le code tel qu'il est écrit...je vais éviter d'écrire la totalité de mon code source ca prendrai des pages et des pages...tout ce qui à une importance est là. La méthode Piece::tesbouger fonctionne est n'est là que pour le vérifier que le déplacement de la pièce est en accord avec les régles.
Chessboard::Chessboard() : m_blanc("blanc"), m_noir("noir") { for(int i=0;i<=7;i++) { for(int j=0;j<=7;j++) { switch(j) { case 0: { switch(i) { case 0: { m_chessboard[i][j] = new Tour(i,j,"blanc"); break; } case 1: { m_chessboard[i][j] = new Cavalier(i,j,"blanc"); break; } case 2: { m_chessboard[i][j] = new Fou(i,j,"blanc"); break; } case 3: { m_chessboard[i][j] = new Dame(i,j,"blanc"); break; } case 4: { m_chessboard[i][j] = new Roi(i,j,"blanc"); break; } case 5: { m_chessboard[i][j] = new Fou(i,j,"blanc"); break; } case 6: { m_chessboard[i][j] = new Cavalier(i,j,"blanc"); break; } case 7: { m_chessboard[i][j] = new Tour(i,j,"blanc"); break; } } break; } case 1: { m_chessboard[i][j] = new Pion(i,j,"blanc"); break; } case 6: { m_chessboard[i][j] = new Pion(i,j,"noir"); break; } case 7: { switch(j) { case 0: { m_chessboard[i][j] = new Tour(i,j,"noir"); break; } case 1: { m_chessboard[i][j] = new Cavalier(i,j,"noir"); break; } case 2: { m_chessboard[i][j] = new Fou(i,j,"noir"); break; } case 3: { m_chessboard[i][j] = new Dame(i,j,"noir"); break; } case 4: { m_chessboard[i][j] = new Roi(i,j,"noir"); break; } case 5: { m_chessboard[i][j] = new Fou(i,j,"noir"); break; } case 6: { m_chessboard[i][j] = new Cavalier(i,j,"noir"); break; } case 7: { m_chessboard[i][j] = new Tour(i,j,"noir"); break; } } break; } default: { m_chessboard[i][j] = NULL; } } } } } void Chessboard::bougerPiece(int x1, int y1, int x2, int y2) { Piece* pieceABouger = Chessboard::getPiece(x1,y1); if(pieceABouger->testbouger(x2,y2)) { setPiece(x2, y2, pieceABouger); m_chessboard[x1][y1] = NULL; } } Piece* Chessboard::getPiece(int x, int y) { return m_chessboard[x][y]; } void Chessboard::setPiece(int x, int y, Piece *cible) { m_chessboard[x][y] = cible; }
j'utilise ce code pour afficher:
lorsque j'affiche pour la première fois sans avoir bouger de pièce le programme fonctionne. Quand il essaie à nouveau d'afficher après avoir bouger les pièces , au moment ou il essaie d'afficher une des case qui a changé, le programme ne répond plus du tout. (fenêtre windows: JeuEchec.exe has stoppend working)
si j'enlève les lignes de bougerPiece
alors le programme ne freeze plus...mais bien sur mes pièces ne bougent pas :p
void Jeu::afficher() { cout<<"y"<<endl; for(int j=0;j<=7;j++) { cout<<endl; cout<<7-j<<" "; for(int i=0;i<=7;i++) { if(m_echiquier.getPiece(7-i, j)!=NULL) { cout<<" "<<m_echiquier.getPiece(i, 7-j)->getNom()<<" "; }else { cout<<" "; } } cout<<endl; } cout<<endl; cout<<" 0 1 2 3 4 5 6 7 x"<<endl; }
lorsque j'affiche pour la première fois sans avoir bouger de pièce le programme fonctionne. Quand il essaie à nouveau d'afficher après avoir bouger les pièces , au moment ou il essaie d'afficher une des case qui a changé, le programme ne répond plus du tout. (fenêtre windows: JeuEchec.exe has stoppend working)
si j'enlève les lignes de bougerPiece
setPiece(x2, y2, pieceABouger); m_chessboard[x1][y1] = NULL;
alors le programme ne freeze plus...mais bien sur mes pièces ne bougent pas :p
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question