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

SFML - Access violation reading location when saving RenderTexture to image 0xC0000005

我使用的是 Visual Studio 2017。 调试时它指向第 11 行

texture.getTexture().copyToImage().saveToFile("C:/test.bmp");

有错误

Exception thrown at 0x54B06B9E (sfml-graphics-2.dll) in Project2.exe: 0xC0000005: Access violation reading location 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 包,每次创建新项目时我都会从一个设置的文件夹中包含它们,link 库,也通过外部 lib 文件夹手动添加

第三次编辑

经过一些工作,我设法修复了调试库和发布库,现在代码抛出异常

Run-Time Check Failure #2 - Stack around the variable 'texture' was corrupted.

包含完整输出和代码的屏幕截图:

另一件事是,当我继续而不处理它向我抛出的异常时:

Unhandled exception at 0x00D26859 in Project2.exe: Stack cookie instrumentation code detected a stack-based buffer overrun.

我最好的猜测是您 link 以某种方式错误地访问了库。 确保在调试配置中有调试库,在发布配置中有发布库。

请记住,调试库通常以 "d" 结尾。如果你没有正确设置调试库,你就不能调试你的代码,这就解释了为什么你会收到 poor 错误消息。

我将 here 一个 link 留给有类似问题的人到 SFML 论坛。

希望对您有所帮助。


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

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

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