【问题标题】:Access Violation SFML访问冲突 SFML
【发布时间】:2014-12-28 23:05:26
【问题描述】:

我已经开始使用 SFML 库为大学课程创建图形战舰游戏,目前我正在创建 4 个矩形来创建窗口周围的边框(如果有更简单的方法,请告诉我,但我想继续4个矩形的想法)

我的问题是我将第一个矩形绘制到屏幕上并对其进行调试,它工作正常,但是我绘制了第二个矩形并引发以下错误

Unhandled exception at 0x00656A0E (sfml-graphics-d-2.dll) in Battleships.exe: 0xC0000005: Access violation reading location 0x00000004

这是我的代码:

矩形被称为 a 和 b(抱歉命名混乱)

#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>

int main()
{
    sf::RenderWindow menu(sf::VideoMode(800, 600), "SFML works!");

    sf::RectangleShape a(sf::Vector2f(800, 20));
    a.setFillColor(sf::Color::White);

    sf::RectangleShape b(sf::Vector2f(20, 600));
    b.setFillColor(sf::Color::White);

    sf::Font font;
    if(!font.loadFromFile("arial.ttf"))
    {
        std::cout << "ERROR: Cannot load font" << std::endl;
    }

    sf::Text text("TEST", font, 80);
    text.setPosition(sf::Vector2f(400/2.0f,300/2.0f));
    text.setColor(sf::Color::White);

    menu.clear();
    menu.draw(a);
    menu.draw(b);
    menu.display();
}

【问题讨论】:

  • 如果找不到文件,是的,您会显示错误。但随后您的代码继续运行,就好像没有错误一样。
  • 您在使用 Visual Studio 吗?如果可以,请在“sf::Text text("TEST", font, 80);" 行设置一个断点并检查字体是否等于任何东西,在我看来您正在尝试使用尚未初始化的字体

标签: c++ sfml


【解决方案1】:
    sf::Font font;
    if(!font.loadFromFile("arial.ttf"))
    {
        std::cout << "ERROR: Cannot load font" << std::endl;
    }

此时您需要停止,即从 main 返回。未加载字体,然后您稍后使用它,导致空指针取消引用。

【讨论】:

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