因此,我一直在学习C++,并且一直在尝试通过一些视频来学习一些SFML 2。最初我没有真正的问题,我使用的是MS VS2012,一切都很好。我开始使用MS VS2015社区,但一切都开始出错,我也不知道为什么!
主要问题:
一切都能编译,但是当我尝试使用sf::RenderWindow::createWindow()时,它只会崩溃
错误消息:
我收到消息“SFML_Project.exe不再起作用”,
我去调试它,它给了我以下信息:
引发未处理的异常:读取访问冲突。
此-> _ Ptr为0xCCCCCCCC。
如果有用于此异常的处理程序,则可以安全地继续执行该程序。
并在此功能上执行(我一无所知的一些SFML代码)
const facet *_Getfacet(size_t _Id) const
{ // look up a facet in locale object
const facet *_Facptr = _Id < _Ptr->_Facetcount
? _Ptr->_Facetvec[_Id] : 0; // null if id off end <- ON THIS LINE OF CODE IT BREAKS
if (_Facptr != 0 || !_Ptr->_Xparent)
return (_Facptr); // found facet or not transparent
else
{ // look in current locale
locale::_Locimp *_Ptr = _Getgloballocale();
return (_Id < _Ptr->_Facetcount
? _Ptr->_Facetvec[_Id] // get from current locale
: 0); // no entry in current locale
}
}
在调用堆栈中给出的信息行
sfml-system-d-2.dll!std::locale::_Getfacet(unsigned int _Id) Line 451 C++
我的代码:
#include <iostream>
#include "SFML\Graphics.hpp"
int main()
{
sf::RenderWindow window;
window.create(sf::VideoMode(800, 800), "WindowName");
sf::Texture texture;
sf::Sprite sprite;
texture.loadFromFile("Player.png");
sprite.setTexture(texture);
sf::Event eventHandler;
while(window.isOpen())
{
while(window.pollEvent(eventHandler))
{
switch(eventHandler.type)
{
case sf::Event::Closed:
window.close();
break;
}
}
window.clear();
window.draw(sprite);
window.display();
}
}
SFML版本: Visual C++ 14(2015)-32位
项目属性:
调试-> C / C++->常规->其他包含目录:
调试->链接器->常规->其他库目录:
调试->链接器->输入->其他依赖项:
我尝试了什么:
我尝试将所有依赖项从sfml-XX-d.lib转换为sfml-XX.lib文件,这确实允许我创建一个窗口并在该窗口上绘制形状,但是当我尝试使用sf::Texture时控制台命令窗口::: loadFromFile(“filename”)变成矩阵并开始发出哔声。
最佳答案
这可能是因为您在图形库之前链接了窗口库。
尝试向上移动图形库下的窗口库。
sfml-graphics-d.lib
sfml-window-d.lib
sfml-system-d.lib
如果仍然崩溃,则可能是因为您的sfml的dll与您当前拥有的sfml版本不匹配。一次对我来说,我下载了新版本的sfml而不更新二进制文件。
关于crash - SFML sf::RenderWindow::createWindow()使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844966/