Утечка памяти в GTK под Windows 7 в gtk_widget_queue_draw
Следующая программа 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;
}
Утечка в 64-битной Windows 7 при компиляции с использованием gcc 4.5.2, как показывает диспетчер задач. Он не протекает при компиляции под Windows XP 32-bit. Программа ничего не делает. Он создает окно, помещает в него поле и затем вызывает gtk_widget_queue_draw из таймера каждые 200 мс.
Вот командный файл, чтобы скомпилировать и связать тест. Переменная 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 ответа
Windows 7 64-bit
, с помощью 32-bit MinGW
а также GTK+
,
У меня похожий случай без gtk_widget_queue_draw (GTK_WIDGET (vbox));
позвонить в Timer
функция.
У меня сложилось впечатление, что это g_timeout_add()
которые вызывают утечку памяти (как указано на вкладке процесса в диспетчере задач Windows)
PTL.
Это была ошибка GTK 685959. Большая часть утечки была исправлена в GTK 2.24.14.
Ошибка 707760 отслеживает обновления пакетов (бинарных файлов, комплектов).