Probleme mit Containerklasse stack



  • Tag alle zusammen!

    ich hab ein kleines Problem:

    Ich hab eine Klasse namens Sudoku erstellt und muss ein paar variablen auf dem stack zwischen speichern! Nun hab ich mich darüber informiert und alles so gemacht wie ich es gefunden hab! Der Teil der Programmes wird auch ohne Fehler kompiliert nur wenn ich es starte in Borland kommt eine Zugriffsverletzung im Adressberreich und der Debugger bricht ab (siehe fett markierter bereich)! Hat einer eine Idee?

    Sudoku.cpp

    #include<conio>
    #include<iostream>
    #include<stack>
    
    #include "Sudoku.h"
    
    using namespace std;
    
    Sudoku::Sudoku(int feld[9][9])
    {
     for(int z=0; z<9; z++)
     {
      for(int s=0; s<9; s++)
      {
       this->feld[z][s] = feld[z][s];
      }
     }
    }
    
    void Sudoku::ausgebenFeld()
    {
     for(int z=0; z<9; z++)
     {
      for(int s=0; s<9; s++)
      {
       cout << feld[z][s];
      }
      cout << endl;
     }
    }
    
    bool Sudoku::testen(int zahl, int pz, int ps)
    {
     for(int z=0; z<9; z++)
     {
      if(feld[z][ps] == zahl)
      {
       return false;
      }
     }
    
     for(int s=0; s<9; s++)
     {
      if(feld[pz][s] == zahl)
      {
       return false;
      }
     }
    
     int x = (pz / 3);
     int y = (ps / 3);
    
     for(int z=0+3*x; z<3*x+3; z++)
     {
      for(int s=0+3*y; s<3*y+3; s++)
      {
       if(feld[z][s] == zahl)
       {
        return false;
       }
      }
     }
    
     return true;
    }
    
    void Sudoku::loesen()
    {
     int a = 0;
     while(setzenZahlen(a) == false)
     {
      [b]int z = reihenfolgeZeilen.top();[/b]  //
      [b]int s = reihenfolgeSpalten.top();[/b] // :warning:  Hier bricht er immer ab!!!!!!!
    
      int aktuelleZahl = feld[z][s];
      feld[z][s] = 0;
    
      reihenfolgeZeilen.pop();
      reihenfolgeSpalten.pop();
    
      setzenZahlen((aktuelleZahl)+1);
     }
    }
    
    bool Sudoku::setzenZahlen(int zahl)
    {
     for(int z=0; z<9; z++)
     {
      for(int s=0; s<9; s++)
      {
       if(feld[z][s] == 0)
       {
        for(int i=1; i<=9; i++)
        {
         if(testen(i,z,s) == true)
         {
          feld[z][s] = i;
          reihenfolgeZeilen.push(z);
          reihenfolgeSpalten.push(s);
         }
         else
         {
          return false;
         }
        }
       }
      }
     }
     return true;
    }
    

    Sudoku.h

    #ifndef SudokuH
    #define SudokuH
    #include<stack>
    
    using namespace std;
    
    class Sudoku
    {
     private:
             int feld[9][9];
             stack<int> reihenfolgeZeilen;
             stack<int> reihenfolgeSpalten;
    
     public:
             Sudoku(int feld[9][9]);
             void ausgebenFeld();
             bool testen(int zahl, int z, int s);
             void loesen();
             bool setzenZahlen(int);
    };
    #endif
    

    main.cpp

    #include<conio>
    #include<iostream>
    #include "Sudoku.h"
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
     int sudoku2[9][9]  =  {0,0,6,2,0,1,0,0,0,
                            8,0,0,0,0,0,0,7,1,
                            0,0,1,7,0,0,0,3,2,
                            0,0,7,0,3,0,0,4,0,
                            0,5,0,0,0,0,0,8,0,
                            0,8,0,0,4,0,7,0,0,
                            4,6,0,0,0,5,8,0,0,
                            1,7,0,0,0,0,0,0,4,
                            0,0,0,4,0,6,5,0,0};
     Sudoku s(sudoku2);
     s.ausgebenFeld();
     //s.setzenZahlen(1);
     s.loesen();
     cout << endl;
     s.ausgebenFeld();
     getch();
     return 0;
    }
    

    Thx

    Yast

    P.S: Das programm ist noch nicht funktions tüchtig 😉 es geht mir gerade nur um den fehler



  • Warum auch immer wurde der Beitrag einfach gelöscht deshalb mach ich diesen wieder auf.

    Und wie bereits gesagt du solltest bevor du mit top() auf den stack zugreifst testen ob da wirklich daten drin sind.

    BR


Anmelden zum Antworten