Утечка памяти в 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;
}

Утечки под Windows 7 64-битные при компиляции с использованием 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? Некоторые опции компилятора / компоновщика пропущены?

 user142893401 июн. 2012 г., 15:14
Кажется, что это:mail.gnome.org/archives/gtk-app-devel-list/2012-March/… такая же проблема.
 yCalleecharan01 июн. 2012 г., 12:09
Я тестировал под Win XP и под Win 7 (оба 32-разрядных), и я могу подтвердить, что нет утечки.
 ptomato31 мая 2012 г., 20:34
Вы пытались запустить программу проверки утечки памяти, чтобы увидеть, где была выделена утечка памяти?

Ответы на вопрос(2)

Windows 7 64-bit, с помощью32-bit MinGW а такжеGTK+.

У меня похожий случай безgtk_widget_queue_draw (GTK_WIDGET (vbox)); позвонить вTimer функция.

У меня сложилось впечатление, что этоg_timeout_add() которые вызывают утечку памяти (как указано на вкладке процесса в диспетчере задач Windows) ПТЛ.

Это был GTKошибка 685959, Большая часть утечки была исправлена в GTK 2.24.14.

Ошибка 707760 отслеживает обновления пакетов (бинарных файлов, пакетов).

 12 мар. 2013 г., 13:52
У меня та же самая проблема, и это действительно, кажется, ошибка, связанная с утечкой.
 15 мар. 2013 г., 00:00
Правда, но, как я пишу, пока нет пакета GTK + 2.24.14 для Windows. Таким образом, вам придется либо самостоятельно скомпилировать из исходного кода, либо перейти на 2.24.0 в качестве временного обходного пути (большая утечка была введена в 2.24.8).
 13 мар. 2013 г., 21:36
Самая большая утечка была устранена с тех пор. Исправление доступно с GTK 2.24.14.

Ваш ответ на вопрос