gpt4 book ai didi

c - gtk+ 在调用任何 cairo 绘图函数时崩溃

转载 作者:行者123 更新时间:2023-12-04 09:27:56 26 4
gpt4 key购买 nike

抱歉我的英语不好。

我正在按照这篇文章学习 gtk+ 3 作为“helloworld” https://developer.gnome.org/gtk3/stable/gtk-getting-started.html

我的环境:
* Mac OS X 10.8.3
* XQuartz 2.7.4
* GTk+ 3.4.4
* i686-apple-darwin11-llvm-gcc-4.2

在我尝试调用此函数作为绘图的信号处理程序之前一切正常:

static gboolean configure_event_cb(GtkWidget* widget,GdkEventConfigure* event,gpointer data){    if(surface) cairo_surface_destroy(surface);    surface = gdk_window_create_similar_surface(gtk_widget_get_window(widget),                                                CAIRO_CONTENT_COLOR,                                                gtk_widget_get_allocated_width(widget),                                                gtk_widget_get_allocated_height(widget));    //非对象类型.看做普通的struct. cairo看做类似Graphics的静态类.    cairo_t* cr = cairo_create(surface);    cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);    cairo_paint(cr);    cairo_destroy(cr);    return TRUE;}

程序总是在其他函数的“cairo_paint(cr)”或“cairo_fill”行崩溃。这是调用堆栈:

libcairo.2.dylib`_cairo_default_context_in_clip:0x100a71ff5:  pushq  %rbp0x100a71ff6:  movq   %rsp, %rbp0x100a71ff9:  pushq  %rbx0x100a71ffa:  pushq  %rax0x100a71ffb:  movq   %rsi, %rbx0x100a71ffe:  movq   40(%rdi), %rdi0x100a72002:  callq  0x100a761c1               ; _cairo_gstate_in_clip0x100a72007:  movl   %eax, (%rbx)0x100a72009:  xorl   %eax, %eax0x100a7200b:  addq   $8, %rsp0x100a7200f:  popq   %rbx0x100a72010:  popq   %rbp0x100a72011:  ret    

有人能帮帮我吗?

最佳答案

我怀疑由于调用 cairo_surface_destroy 而导致内存损坏。您在哪里声明 surface?在调用 cairo_surface_destroy 之前,您在哪里设置它?您确定它指向引用计数 > 0 的有效表面对象吗?

我会尝试注释该行,看看您是否仍然遇到崩溃。那时您可能需要修复一些内存泄漏,但至少您会知道这是否是问题所在。

关于c - gtk+ 在调用任何 cairo 绘图函数时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com