更改字体颜色时SFML访问冲突

时间:2018-04-21 01:36:08

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

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

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

不知何故,当我在键盘上点击一次时,它会起作用,但当我点击它时会立即停止并且它不会切换。

1 个答案:

答案 0 :(得分:1)

可能不是错误的原因,但如果import os def casefile(path): while(True): try : # raw_input() for python 2 case_name = input("Enter the case: ") # for python 3 os.makedirs(path+case_name) return (case_name) except: pass 是无符号整数,那么条件selectedItemIndex可能导致错误if (selectedItemIndex -1 >= 0)为0,因为它将导致声明被触发。

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

尝试将语句更改为selectedItemIndex

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