Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme d'execution

Debute...

    3 juin 2008 à 13:53:59

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


    • Partager sur Facebook
    • Partager sur Twitter
      3 juin 2008 à 14:14:21

      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.
      • Partager sur Facebook
      • Partager sur Twitter

      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.
      • Editeur
      • Markdown