【发布时间】:2019-06-17 07:40:00
【问题描述】:
我正在使用 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 - 变量“纹理”周围的堆栈已损坏。
另一件事是,当我继续而不处理它向我抛出的异常时:
Project2.exe 中 0x00D26859 处未处理的异常:堆栈 cookie 检测代码检测到基于堆栈的缓冲区溢出。
【问题讨论】:
-
您可以通过分解最后一行来准确查看是哪一个调用导致了异常,从而使事情变得更容易。
-
@PaulMcKenzie 据我所知,它是 .saveToFile 函数,没有 .saveToFile 就可以正常运行
-
你用管理员权限打开VS了吗?您是否尝试将其保存在另一个文件夹中,比
C:限制更少?也许My Documents或类似的可以工作。 -
@alseether以管理员身份打开无效,将位置更改为“D:\output\test.bmp”也没有
-
docs 请注意“如果图像为空,此函数将失败。”。我认为这意味着该函数返回 false,但也许这意味着它调用了未定义的行为?尝试将
texture.clear行移到texture.display之前。
标签: c++ opengl sfml access-violation