2016-12-20 12 views
-6

Ich mache ein Tetris-Spiel in C++ und in der DrawBoard() -Funktion bekomme ich einen Fehler, der lautet: Ausnahme bei 0x0F52DA36 (sfml-Grafik-d-2.dll) in Tetris_C++ geworfen. exe: 0xC0000005: Schreibort für Zugriffsverletzung 0x013EDA88.SFML Zugriffsverletzung

Wenn für diese Ausnahme ein Handler vorhanden ist, kann das Programm sicher fortgesetzt werden.

Hier ist der Code:

void DrawBoard() { 

for (int i = 0; i < boardWidth; i++) 
{ 
    for (int j = 0; j < boardHeight; i++) 
    { 
     switch (board[i][j]) {//What's wrong with this? 
     case 'b': 
      squares[i][j].setFillColor(sf::Color::Blue); 
      break; 
     case 'c': 
      squares[i][j].setFillColor(sf::Color::Cyan); 
      break; 
     case 'y': 
      squares[i][j].setFillColor(sf::Color::Yellow); 
      break; 
     case 'o': 
      squares[i][j].setFillColor(sf::Color(255, 165, 0));//Orange 
      break; 
     case 'p': 
      squares[i][j].setFillColor(sf::Color(150, 50, 250));//Purple 
      break; 
     default: 
      break; 
     } 
    } 
} 

for (int x = 0; x < boardWidth; x++) { 
    for (int y = 0; y < boardHeight; y++) { 
     window.draw(squares[x][y]); 
    } 
} 

}

+1

Willkommen bei Stack-Überlauf. Bitte nehmen Sie sich die Zeit, [The Tour] (http://stackoverflow.com/tour) zu lesen und beziehen Sie sich auf das Material aus der [Hilfe] (http://stackoverflow.com/help/asking), was und wie Sie können fragen Sie hier. –

+2

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

+3

Ohne zu wissen, was "Brett" und "Quadrate" sind, kann Ihnen niemand helfen. –

Antwort

0

Der Fehler bedeutet einfach, dass Ihr Programm versucht, Speicher außerhalb seines zugewiesenen Adressraum zuzugreifen. Aber ohne eine SSCCE zu sehen ist es unmöglich zu wissen, wo dein Fehler ist. Eine Schätzung würde sein, dass eine Ihrer Variablen den Gültigkeitsbereich verlassen hat oder dass Sie versuchen, außerhalb der Grenzen Ihres squares Arrays zuzugreifen - aber auch dies ist nur eine Schätzung basierend auf unvollständigen Informationen.

0
for (int j = 0; j < boardHeight; i++) 

ist es das, was Sie ein Segmentierungsfehler (im sicher, dass es ein Tippfehler) erhalten macht

Sie nur 1 Iterierte für Ihre äußere Schleife, und dann macht die innere Schleife die segfault von i bis Inkrementieren gleich werden wird, ist der Code boardwidth

selbsterklärend, so ich bin sicher das sein sollte:

for (int j = 0; j < boardHeight; j++) 
+0

Danke, es war ein Tippfehler und alles funktioniert jetzt gut. –