Run-Time Check Failure #2 Stack around the variable poker_deck



  • der folgende Code stürzt immer ab aufgrunde eines "Run-Time Check Failure #2 Stack around the variable poker_deck" was corruptet"
    Mein Compiler is

    Dies sind die beiden interressanten Klassen:

    class card
    {
          public:
          int priority; 
          int color;    
    
          public:
          card();       
          void CardChange(int,int); 
          void getCard();  
    };
    
    class deck
    {
    public:
    	deck();
    	void erstellen(deck&);
            void unsort_deck();
    	card default_deck[32];
    	void say_deck(deck&);
    	void say_mixed_deck(/*deck&,int&*/);
    	card mixed_deck[32];
    	int cards_left; //startet per constructor mit der Zahl 52
    };
    

    Dies ist die funktion in der der Fehler auftritt und die funktion die ich davor ausgeführt habe die allerdings fehlerfrei funktioniert:

    void deck::unsort_deck() //letzte ausgeführte Funktion
    {
         int choicer = 0;
         int kartenuebrig = 51;
         int modulouebrig = 52;
         srand (time(NULL));
         for(int i = 0;;i++)
    	 {
    		 choicer = rand()%modulouebrig;
    		 mixed_deck[i] = default_deck[choicer];
    		 default_deck[choicer] = default_deck[kartenuebrig];
    		 kartenuebrig--;
    		 modulouebrig--;
    		 if(modulouebrig == 0) break;
    		 mixed_deck[i].getCard(); /*zum kontrollieren ob alles fehlerfrei funktioniert was auch der Fall war, anscheinend steht der Error in keinem Zusammenhang mit dieser Methode */
             };
      cout << "Deck successfull mixed" << endl;
    };
    
    void deck::say_mixed_deck()   //fehlerhafte Methode
    {
    	for(int i = 0; i < cards_left; i++)
    	{
    		mixed_deck[i].getCard();
    	};
    	system("PAUSE");
    };
    
    void card::getCard()  //diese Methode wird von say_mixed_deck() benutzt
    {
    	string scolor("default");
    	string spriority("default");
    	cout << priority << " " << color << endl;
    	switch(priority)
    	{
    		case 0: cout << "ERROR NO priority_value" << endl;
    			    break;
    		case 1: scolor = "two";
    			    break;
    		case 2: scolor = "three";
    			    break;
    		case 3: scolor = "four";
    			    break;
    		case 4: scolor = "five";
    			    break;
    		case 5: scolor = "six";
    			    break;
    		case 6: scolor = "seven";
    			    break;
    		case 7: scolor = "eight";
    			    break;
    		case 8: scolor = "nine";
    			    break;
    		case 9: scolor = "ten";
    			    break;
    		case 10: scolor = "jack";
    			    break;
    		case 11: scolor = "quenn";
    			    break;
    		case 12: scolor = "king";
    			    break;
    		case 13: scolor = "ace";
    			    break;
    	};
    	switch(color)
    	{
    		case 0: cout << "ERROR NO color_value" << endl;
    			    break;
    		case 1: spriority = "diamond";
    			    break;
    		case 2: spriority = "heart";
    			    break;
    		case 3: spriority = "spade";
    			    break;
    		case 4: spriority = "club";
    			    break;
    	};
    	cout << spriority + " " + scolor << endl;
    };
    

    Das ist die Main:

    int main()
    {
    	deck poker_deck;
    	poker_deck.erstellen(poker_deck);
    	poker_deck.unsort_deck();
    	poker_deck.say_mixed_deck();
    	system("PAUSE");
    	return 0;
    };
    

    Ich hoffe das ist all der Code den ihr brauhct um mir zu helfen.



  • Boundchecks sind eine feine Sache und wenn du dafür eine exception werfen würdest, wüsstest du, wo der Fehler ist.

    Zuerst geht man da einmal mit dem Debugger schauen, was da so für Werte kommen.. und dann wärst du auf das gestossen:

    int choicer = 0;
         int kartenuebrig = 51;
         int modulouebrig = 52;
         srand (time(NULL));
         for(int i = 0;;i++)
         {
             choicer = rand()%modulouebrig;
             mixed_deck[i] = default_deck[choicer];
    

    default_deck hat eine Grösse von 32 (also von 0 bis 31 ). choicer hat aber ein Wertebereich von 0 bis 51..
    Ich habe mir den Rest des Codes nicht gross angesehen, aber ich vermute mal, dass es da noch mehr solche Fehler gibt. Also schön schauen!

    btw:
    srand solltest du lediglich einmal in deinem Programm aufrufen und das in der main..



  • nope, das ist der einzige Fehler. Ich habe nämlich von einem 32 Karten auf ein 52 Kartendeck umgestellt und dabei vergessen den Klassenarray für die Karten auch zu vergrößern.


Anmelden zum Antworten