Bonjour, je débute et suis en train de programmer une classe gerant un jeu de carte.
Cependant, lors de l'éxécution, le message suivant s'inscrit dans la console:
Process returned -1073741819 (0xC0000005) execution time : 1.762 s
Press any key to continue.
Voici mon code:
main.cpp
#include <iostream>
#include <time.h>
#include "jeuCarte.h"
using namespace std;
int main(){
//Initialisation du hasard
srand(time(NULL));
/*
DECLARATION DES VARIABLES ....
*/
jeuCartes JeuDeCartes;
/*
FIN DE DECLARATION DES VARIABLES
*/
//TESTS
cout<<"Avant que l'on coupe :"<<endl;
JeuDeCartes.afficherJeu();
JeuDeCartes.couperJeu();
cout<<endl<<"Apres que l'on coupe"<<endl;
JeuDeCartes.afficherJeu();
return 0;
}
jeuCarte.h
#ifndef DEF_JEUCARTES
#define DEF_JEUCARTES
#include <string> //Sert a utiliser le type string
using namespace std;
class jeuCartes{
public:
jeuCartes();
void afficherJeu();
void couperJeu();
private:
void initTableauBooleen();
int nbCartes;
int nbValeurs;
int nbCouleurs;
string *valeurs;
string *couleurs;
bool **tableauBooleen;
int nombreCartesBool;
int *jeu;
int nbCartesRestantes;
};
class card{
public:
card(int codeEnvoye);
string renvoyerValeur();
string renvoyerCouleur();
void afficherCarte();
private:
int code;
string couleur;
string valeur;
};
#endif
jeuCarte.cpp
#include <iostream>
#include <string>
#include <time.h>
#include "jeuCarte.h"
using namespace std;
/*
CLASSE DU JEU DE CARTES
*/
jeuCartes::jeuCartes(){
//Propriétés générales
nbCartes=32;
nbCouleurs=4;
//Definition des valeurs
nbValeurs=8;
valeurs=new string[nbValeurs];
//On doit rentrer les valeurs...
valeurs[0]="7";valeurs[1]="8";valeurs[2]="9";valeurs[3]="10";
valeurs[4]="Valet";valeurs[5]="Dame";valeurs[6]="Roi";valeurs[7]="As";
//Definition des couleurs
nbCouleurs=4;
couleurs=new string[nbCouleurs];
//On rentre les couleurs qu'il y a
couleurs[0]="Coeur";couleurs[1]="Trefle";
couleurs[2]="Pique";couleurs[3]="Carreau";
//On crée le jeu de carte à distribuer a partir d'un tableau de booleen
/* Le tableau de booleen sera représenté de la manière suivante:
C 1 1 1 1 1 1 1 1
T 1 1 1 1 1 1 1 1
P 1 1 1 1 0 1 1 1
K 1 1 1 1 1 1 1 1
7 8 9 10 V D R A
L'indice est 0(false) si la carte a été distribuée, 1(true) sinon
*/
//On rangera les cartes en utilisant comme code carte=10*i+j
*tableauBooleen=new bool[nbValeurs];
for(int i=0;i<nbValeurs;i++){
tableauBooleen[i]=new bool[nbCouleurs];
}
initTableauBooleen();
jeu=new int[nbCartes];
for (int i=0;i<nbCartes;i++){
jeu[i]=-1;
}
// On initialise le jeu de 32 cartes
int compteur=0;
while (nombreCartesBool!=0){
int i=rand()%nbValeurs;
int j=rand()%nbCouleurs;
if (tableauBooleen[i][j]==true){
jeu[compteur]=10*i+j;
compteur++;
nombreCartesBool--;
tableauBooleen[i][j]=false;
}
}
nbCartesRestantes=nbCartes;
}
void jeuCartes::initTableauBooleen(){
for (int i=0;i<nbValeurs;i++){
for (int j=0;j<nbCouleurs;j++){
tableauBooleen[i][j]=true;
}
}
nombreCartesBool=nbCartes;
}
void jeuCartes::afficherJeu(){
for (int i=nbCartes-nbCartesRestantes;i<nbCartes;i++){
card carte(jeu[i]);
carte.afficherCarte();
}
}
void jeuCartes::couperJeu(){
int pivot;
pivot=rand()%(nbCartes-1);
while(pivot!=0){
int i,temp;
temp=jeu[0];
for(i=0;i<31;i++){
jeu[i]=jeu[i+1];
}
jeu[nbCartes-1]=temp;
pivot--;
}
}
/*
CLASSE DES CARTES INDIVIDUELLES
*/
card::card(int codeEnvoye){
string listeValeurs[8];
listeValeurs[0]="7";listeValeurs[1]="8";listeValeurs[2]="9";listeValeurs[3]="10";
listeValeurs[4]="Valet";listeValeurs[5]="Dame";listeValeurs[6]="Roi";listeValeurs[7]="As";
string listeCouleurs[4];
listeCouleurs[0]="Coeur";listeCouleurs[1]="Trefle";
listeCouleurs[2]="Pique";listeCouleurs[3]="Carreau";
code=codeEnvoye;
couleur=listeCouleurs[codeEnvoye%10];
valeur=listeValeurs[(codeEnvoye-codeEnvoye%10)/10];
}
string card::renvoyerValeur(){
return valeur;
}
string card::renvoyerCouleur(){
return couleur;
}
void card::afficherCarte(){
cout<<valeur<<" de "<<couleur<<endl;
}
C'est ton allocation de tableauBooleen qui pose problème. Ta première ligne tente d'allouer de la mémoire pour la première case du tableau, alors que tu voudrais en fait allouer ces cases.
Regarde la FAQ developpez.com, tout ça est très bien expliqué.
Un conseil : n'utilise pas tant d'allocations dynamiques, surtout si les dimensions sont connues à la compilation et ne changeront jamais. Et lorsque tu dois avoir des tableaux dynamiques, utilise plutôt des conteneurs standards tels que std::vector.
Probleme d'execution
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.