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

问题描述 投票:1回答:2

我正在使用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;
}

EDIT

至于我们检测到它是导致问题的.saveToFile("C:/test.bmp")片段,代码在没有它的情况下正常工作

SECOND EDIT

我手动获得了SFML包,每次我创建一个新项目并链接库时我都会从set文件夹中包含它们,也可以通过外部lib文件夹手动添加

THIRD EDIT

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

运行时检查失败#2 - 变量'texture'周围的堆栈已损坏。

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

另一件事是,当我继续没有处理异常时,它会向我抛出:

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

c++ opengl sfml access-violation
2个回答
1
投票

我最好的猜测是,你将图书馆链接错误。确保在调试配置中有调试库,并在发布配置中释放调试库。

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

我将here与SFML论坛的链接留给了有类似问题的人。

希望有所帮助。


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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.