c++ - 更改字体颜色时发生 SFML 访问冲突

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

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

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 而不是我自己的类来实现它,但没有成功。即使我没有设置字体,我也会遇到同样的问题。

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

最佳答案

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

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

尝试将语句更改为 if (selectedItemIndex > 0)

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

关于c++ - 更改字体颜色时发生 SFML 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49951564/

相关文章:

c++ - "use -D_SCL_SECURE_NO_WARNINGS"是什么意思?

C++ GetDC 所有监视器

带有 MySQL 的 C++ 生成文件

c++ - C++中读取转换字符的问题

c# - 给图片框 URL

c++ - 添加到路径 Visual Studio Release Build

c - VS2017 编译器为除法/余数对发出 2 个除法指令

c++ - 变量 args SFINAE 默认构造函数在 clang 中工作,但在 Visual Studio 2015 中失败

c++ - 是否有免费的解析器生成器可以生成 C++ 代码并正确处理 Unicode?

c++ - 升压参数 : named template argument in combination with CRTP