在gtk_widget_queue_draw中Windows 7下的GTK内存泄漏

时间:2012-05-31 16:42:18

标签: windows gcc memory-leaks gtk mingw

以下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位下编译时不会泄漏。该计划什么都不做。它创建一个窗口,放在那里,然后每隔200ms从一个计时器调用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?一些编译器/链接器选项错过了?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

这是GTK bug 685959。大多数泄漏都是在GTK 2.24.14中修复的。

Bug 707760跟踪包(二进制文件,包)更新。