我正在使用C ++和DrawBoard()函数制作一个俄罗斯方块游戏,我收到的错误是: 在Tetris_C ++中,0x0F52DA36(sfml-graphics-d-2.dll)抛出异常.exe:0xC0000005:访问冲突写入位置0x013EDA88。
如果存在此异常的处理程序,则可以安全地继续该程序。
以下是代码:
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]);
}
}
}
答案 0 :(得分:0)
错误只是意味着您的程序试图访问其分配的地址空间之外的内存。
但是没有看到SSCCE,就无法知道你的错误在哪里。一个 guess 就是你的一个变量超出了范围,或者你试图在squares
数组的范围之外访问 - 但同样,这只是基于不完整的猜测资讯
答案 1 :(得分:0)
for (int j = 0; j < boardHeight; i++)
这就是让你得到分段错误的原因(我确定它是一个错字)
你的外循环只获得1次迭代,然后内循环通过递增i
直到它变得等于boardwidth
代码是自我解释的,所以我确定这应该是:
for (int j = 0; j < boardHeight; j++)