SFML访问冲突

时间:2016-12-20 21:35:25

标签: c++ exception sfml access-violation

我正在使用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]);
    }
}

}

2 个答案:

答案 0 :(得分:0)

错误只是意味着您的程序试图访问其分配的地址空间之外的内存。 但是没有看到SSCCE,就无法知道你的错误在哪里。一个 guess 就是你的一个变量超出了范围,或者你试图在squares数组的范围之外访问 - 但同样,这只是基于不完整的猜测资讯

答案 1 :(得分:0)

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

这就是让你得到分段错误的原因(我确定它是一个错字)

你的外循环只获得1次迭代,然后内循环通过递增i直到它变得等于boardwidth

来产生段错误

代码是自我解释的,所以我确定这应该是:

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