【发布时间】:2014-08-13 01:59:05
【问题描述】:
我开始学习 SFML,我想创建精灵来从文件中加载图像,所以我只是按照教程做了很明显的事情。
sf::Texture texture;
texture.loadFromFile("C:\image.png");
sf::Sprite sprite;
sprite.setTexture(texture);
window.draw(sprite);
当我启动程序时,我只得到一个白屏和“itsprgps.exe 中 0x50CEDEDA (msvcr110.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00524000。”,控制台也充满了随机符号。我试图寻找一些信息,但我只是发现“如果纹理被破坏或移动到内存中的其他位置,精灵最终会得到一个无效的纹理指针”,这对某些人来说可能很明显,但我是新手,他们不要给出任何有效的例子。
我正在使用 SFML 2.1 和 Visual Studio 2013
编辑:
这是我的代码示例,其中没有我在尝试加载纹理之前绘制的所有形状:
包括“stdafx.h”
int main()
{
sf::RenderWindow window(sf::VideoMode(557, 500), "My window");
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color(255, 255, 255));
sf::Texture texture;
texture.loadFromFile("C:\roads.png");
sf::Sprite sprite;
sprite.setTexture(texture);
window.draw(sprite);
window.display();
}
return 0;
}
我还意识到其他事情......我也无法加载字体,它发生完全相同的事情,我想我知道为什么。当我开始项目时,我添加了用于发布而不是调试的库(“sfml-system.lib;sfml-main.lib;sfml-graphics.lib;sfml-window.lib;”而不是“sfml-system-d. lib;sfml-main-d.lib;sfml-graphics-d.lib;sfml-window-d.lib;") 所以我认为这实际上可能是问题所在,所以我试图解决它,但我遇到了另一种问题。
长话短说:我尝试了正确的调试和发布配置,但我得到了不同的错误,首先,我缺少一个 MSVCR110D.dll,所以出于好奇,我下载了它并将它放在调试文件夹中,现在我得到 0xc000007b。我尝试了不同的配置,唯一可行的配置是使用发布库进行调试(到目前为止尝试加载纹理或字体时除外)。
【问题讨论】:
-
loadFromFile 返回一个
bool。请检查返回值是否加载成功。 -
问题可能在于
window的初始化,请提供一个重现问题的最小可编译示例。 -
在原帖中添加了示例,还添加了一些注释,请查看。
-
混合调试/发布配置不好...stackoverflow.com/a/20215509/520217
-
是的,我意识到了这一点,但我似乎有问题,我认为我的系统缺少一些重要文件或其他东西