以下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; }
在任务pipe理器显示的使用gcc 4.5.2编译的Windows 7 64位下泄漏。 它在Windows XP 32位下编译时不会泄漏。 该程序什么都不做。 它创build一个窗口,放在那里有一个盒子,然后从一个定时器每个200ms调用gtk_widget_queue_draw。
这是一个batch file来编译和链接testing。 variablesGTK被设置为包含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 7 64-bit
,使用32-bit MinGW
和GTK+
。
我有一个没有gtk_widget_queue_draw (GTK_WIDGET (vbox));
的类似情况gtk_widget_queue_draw (GTK_WIDGET (vbox));
调用Timer
功能。
我的印象是,它是g_timeout_add()
引起内存泄漏(如窗口任务管理器中的进程选项卡上报告)PTL。
这是GTK 错误685959 。 大部分漏洞都是在GTK 2.24.14中修复的。
错误707760跟踪包(二进制文件,包)更新。