【问题标题】:Memory leak in GTK under Windows 7 in gtk_widget_queue_drawgtk_widget_queue_draw 在 Windows 7 下 GTK 中的内存泄漏
【发布时间】:2012-05-31 16:42:17
【问题描述】:

以下 GTK 程序:

#include <gtk/gtk.h>
GtkVBox *vbox;
GtkWindow *win;
gboolean Timer (gpointer user_data)
{
   gtk_widget_queue_draw (GTK_WIDGET (vbox));
   return 1;
}
int main(int argc, char **argv)
{
   gtk_init(&argc, &argv);
   win = (GtkWindow*)gtk_window_new(GTK_WINDOW_TOPLEVEL);
   vbox = (GtkVBox*)gtk_vbox_new(TRUE, 1);
   gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(vbox));
   g_timeout_add (200, Timer, 0);
   gtk_widget_show_all(GTK_WIDGET(win));
   gtk_main();
   return 0;
}

如任务管理器所示,使用 gcc 4.5.2 编译时在 Windows 7 64 位下发生泄漏。在 Windows XP 32 位下编译时不会泄漏。该程序什么也不做。它创建一个窗口,放置一个框,然后每 200 毫秒从一个计时器调用 gtk_widget_queue_draw。

这是一个编译和链接测试的批处理文件。变量 GTK 设置为包含 GTK 二进制分发的目录。例如。 2.24.10 在这种情况下。

set GTK=c:/temp/GTK
gcc -c -mms-bitfields -I%gtk%/lib/gtk-2.0/include -I%gtk%/lib/gdk-2.0/include -I%gtk%/lib/glib-2.0/include -I%gtk%/include -I%gtk%/include/atk-1.0 -I%gtk%/include/gdk-pixbuf-2.0 -I%gtk%/include/cairo -I%gtk%/include/pango-1.0 -I%gtk%/include/gio-win32-2.0 -I%gtk%/include/glib-2.0 -I%gtk%/include/gtk-2.0 test.c
gcc test.o --mwindows -Wl,-luuid -L%gtk%/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -lgobject-2.0 -lglib-2.0 -o test.exe

有什么想法吗? GTK、gcc、MinGW 出了什么问题?遗漏了一些编译器/链接器选项?

【问题讨论】:

标签: windows gcc memory-leaks gtk mingw


【解决方案1】:

Windows 7 64-bit,使用32-bit MinGWGTK+

我有一个类似的情况,在 Timer 函数中没有 gtk_widget_queue_draw (GTK_WIDGET (vbox)); 调用。

我的印象是g_timeout_add() 导致了内存泄漏(如 Windows 任务管理器中的进程选项卡上所报告的) 专利文献。

【讨论】:

    【解决方案2】:

    这是 GTK bug 685959。 GTK 2.24.14 中修复了大部分泄漏。

    Bug 707760 跟踪包(二进制文件、捆绑包)更新。

    【讨论】:

    • 我有同样的问题,这似乎确实是与泄漏有关的错误。
    • 自那时以来最大的泄漏已得到修复。自 GTK 2.24.14 起该修复程序可用。
    • 没错,但在我写这篇文章的时候,还没有适用于 Windows 的 GTK+ 2.24.14 包。因此,您要么必须自己从源代码编译,要么降级到 2.24.0 作为临时解决方法(大泄漏是在 2.24.8 中引入的)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2012-04-16
    • 2013-05-10
    • 2021-03-28
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多