我正在使用Visual Studio 2017。 调试时,它指向11行
texture.getTexture().copyToImage().saveToFile("C:/test.bmp");
有错误
在Project2.exe中的0x54B06B9E(sfml-graphics-2.dll)处引发了异常: 0xC0000005:访问冲突读取位置0xCCE6C37F。
我想将纹理保存到.bmp文件。
#include<iostream>
#include<SFML/Graphics.hpp>
int main()
{
using namespace sf;
RenderTexture texture;
texture.create(800, 600);
texture.display();
texture.clear(Color::Black);
texture.getTexture().copyToImage().saveToFile("C:/test.bmp");
return 0;
}
据我们所知,是导致问题的.saveToFile("C:/test.bmp")
片段,没有它,代码可以正常工作
我是手动获得SFML软件包的,每次创建新项目并链接库时,都会从设置的文件夹中包含它们,这也可以通过外部lib文件夹手动添加
经过一些工作,我设法修复了调试库和发行库,现在代码引发了异常
运行时检查失败#2-变量'texture'周围的堆栈已损坏。
另一件事是,当我继续处理未处理的异常时,它会向我抛出此信息:
Project2.exe中0x00D26859的未处理异常:堆栈cookie工具代码检测到基于堆栈的缓冲区溢出。
答案 0 :(得分:1)
我最好的猜测是您以某种方式链接了库。 确保在调试配置中具有调试库,在发布配置中具有发布库。
请记住,调试库通常以“ d”结尾。如果未正确设置调试库,则无法调试代码,这将解释为什么收到 poem 错误消息。
我留下here到SFML论坛的链接,并且有类似的问题。
希望有帮助。
请注意,对于sfml的初学者,我强烈建议使用NuGet软件包安装库(右键单击您的解决方案->管理NuGet软件包->查找SFML->安装)
这适用于SFML,不确定适用于OpenGL。
答案 1 :(得分:0)
我找到了一个答案,问题是我没有使用针对VS 2017编译的.dll,而是使用了针对2015编译的.dll,将它们切换了,它就像一个魅力