【问题标题】:SFML access violation when changing font color更改字体颜色时的 SFML 访问冲突
【发布时间】:2018-04-21 01:36:07
【问题描述】:

我的程序中的菜单类有问题。 当我尝试切换菜单文本颜色时:

void Menu::moveUp()
{
    if (selectedItemIndex -1 >= 0)
    {
        menuLabel[selectedItemIndex].setColor(false);
        selectedItemIndex--;
        menuLabel[selectedItemIndex].setColor(true);
    }
}

void Menu::moveDown()
{
    if (selectedItemIndex + 1 < NUMBER_OF_MENU_LABELS)
    {
        menuLabel[selectedItemIndex].setColor(false);
        selectedItemIndex++;
        menuLabel[selectedItemIndex].setColor(true);
    }
}

void Menu::update()
{
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
    {
        moveUp();
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
    {
        moveDown();
    }

}

在 Xan-Man.exe 中的 0x51D45960 (sfml-graphics-d-2.dll) 处引发异常:0xC0000005:访问冲突写入位置 0x00000008。

在函数中

void Writing::setColor(bool color)
{
    if (color)
    {
        text.setFillColor(sf::Color(0, 255, 255)); 
    } 
    else 
    {
        text.setFillColor(sf::Color(255, 255, 255)); 
    }
}

我尝试使用 sf::Text 而不是我自己的类来实现它,但它没有用。即使我没有设置字体,我也遇到了同样的问题。

不知何故,当我在键盘上单击一次时它可以工作,但是当我单击它时它会立即停止并且不会切换。

【问题讨论】:

    标签: c++ visual-studio visual-c++ sfml


    【解决方案1】:

    可能不是错误的原因,但如果selectedItemIndex 是一个无符号整数,那么如果selectedItemIndex 为0,则条件if (selectedItemIndex -1 &gt;= 0) 可能会导致错误,因为它会导致语句被触发。

    因此,selectedItemIndex 将下溢并回绕到该类型可表示的最大可能值。为此,它将尝试访问可能导致错误的越界元素。

    尝试将语句更改为if (selectedItemIndex &gt; 0)

    如果这不能解决问题,那么您需要向我们提供更多信息和/或代码。

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多