c++ - 退出时出现 Cairo 错误消息

标签 c++ cairo

我目前正在使用 Cairo 进行一些测试,以替换一些现有的 GDI/GDI+ Visual C++ 2010 中的代码,它似乎工作正常,但我越来越 每次关闭我的应用程序时都会出现一条错误消息:

“CairoTest.exe 中 0x68e629dc 处的第一次机会异常:0xC0000005: 访问违规读取位置0xabababa7"

这个错误只有在我调用 cairo_paint(cr) 而 应用程序正在运行 - 如果我注释掉这一行,它就会消失。这 到目前为止,我的应用程序中只有开罗代码是:

CChildView::CChildView()
{
     testsurface = cairo_image_surface_create_from_png("BlackShinyBackground.png");
}

CChildView::~CChildView()
{
     cairo_surface_destroy(testsurface);
}

void CChildView::OnPaint()
{
     CPaintDC dc(this);

     cairo_surface_t *surface = cairo_win32_surface_create(dc.m_hDC);
     cairo_t *cr = cairo_create (surface);

     cairo_set_source_surface(cr, testsurface, 0, 0);
     cairo_paint(cr);
     cairo_destroy (cr);
     cairo_surface_destroy (surface);
}

谁能指出我做错的方向?

就像我说的,代码似乎工作正常,但我不喜欢不管什么时候看到错误都继续努力。

最佳答案

第一次机会异常并不一定意味着什么——它们是 Windows 内存管理的常规部分。基本上,任何时候你访问虚拟内存中的东西(例如,在页面文件上)都会创建一个第一次机会异常。操作系统通过将所需数据分页到物理内存中来处理它,然后您的代码可以继续执行。

如果/当您看到第二次机会异常时,这意味着操作系统没有处理异常,所以除非您的代码中有处理程序,否则很有可能是表示真正的问题。

关于c++ - 退出时出现 Cairo 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3610888/

相关文章:

c++ - 不明确的重载、隐式转换和显式构造函数

c++ - 如何在 C++ 中为多个类创建别名

C++ 无法在当前系统时间和日期之后命名 txt 文件

python - 为什么在 igraph 绘图中弯曲的边缘不可见?

node.js - 如何修复 Node.js 应用程序中的 cairo 错误 : Assertion failed: (angle_max >= angle_min)

c++ - 内存泄漏线

c++ - 模板函数 : default construction without copy-constructing in C++

cairo - 第一次在 AwesomeWM 中使用 cairo

linux - 开罗,支持 pdf

c - 开罗的笔划对齐