SFML-将RenderTexture保存到图像0xC0000005时访问冲突读取位置

时间:2019-01-23 16:43:45

标签: c++ opengl sfml access-violation

我正在使用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'周围的堆栈已损坏。

包含完整输出和代码的屏幕截图: enter image description here

另一件事是,当我继续处理未处理的异常时,它会向我抛出此信息:

  

Project2.exe中0x00D26859的未处理异常:堆栈cookie工具代码检测到基于堆栈的缓冲区溢出。

2 个答案:

答案 0 :(得分:1)

我最好的猜测是您以某种方式链接了库。 确保在调试配置中具有调试库,在发布配置中具有发布库。

请记住,调试库通常以“ d”结尾。如果未正确设置调试库,则无法调试代码,这将解释为什么收到 poem 错误消息。

我留下here到SFML论坛的链接,并且有类似的问题。

希望有帮助。


请注意,对于的初学者,我强烈建议使用NuGet软件包安装库(右键单击您的解决方案->管理NuGet软件包->查找SFML->安装)

这适用于SFML,不确定适用于OpenGL。

答案 1 :(得分:0)

我找到了一个答案,问题是我没有使用针对VS 2017编译的.dll,而是使用了针对2015编译的.dll,将它们切换了,它就像一个魅力