2016-12-20 133 views
-6

我在C++和DrawBoard()函數中製作了俄羅斯方塊遊戲我收到一個錯誤消息: Tetris_C++中的0x0F52DA36(sfml-graphics-d-2.dll)引發異常。 exe:0xC0000005:訪問衝突寫入位置0x013EDA88。SFML訪問衝突

如果有這種異常的處理程序,程序可能會安全地繼續。

下面的代碼:

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

歡迎堆棧溢出。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –

+2

解決這些問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+3

不知道'board'和'squares'是什麼,沒有人能夠幫助你。 –

回答

0

錯誤只是意味着你的程序試圖爲其分配的地址空間之外訪問內存。 但是沒有看到SSCCE,不可能知道你的錯誤在哪裏。一個猜測會是你的一個變量超出了範圍,或者你試圖訪問你的squares數組的邊界以外 - 但是,這只是基於不完整信息的猜測。

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

這是什麼使你得到一個分段錯誤(我確定它的一個錯字)

你只能得到1次迭代你的外循環,然後內循環通過遞增i,直到它使段錯誤被成爲等於boardwidth

代碼是自我解釋,所以我確定這應該是:

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

謝謝,這是一個錯字,現在一切正常。 –