windows - Windows 7 下 GTK 中 gtk_widget_queue_draw 中的内存泄漏

标签 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 位下编译时不会泄漏。该程序什么也不做。它创建一个窗口,放置一些盒子,然后每 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 7 64 位,使用32 位 MinGWGTK+

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

我的印象是,是 g_timeout_add() 导致了内存泄漏(如 Windows 任务管理器中的进程选项卡所示) PTL。

关于windows - Windows 7 下 GTK 中 gtk_widget_queue_draw 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837776/

相关文章:

java - 多个 JPanel Java 应用程序窗口

python - 在 Python 中加载 dll 时出现 Windows 错误 1114

c++ - 如何在 Windows 上使用 C++ 编程在电源故障时恢复数据

node.js - 使用适用于 Windows 的 NVM 更新 node.js

c++ - 为 GCC 复制 clang 的 __builtin_assume

c - 用于调用函数的 x86 汇编宏(带参数)

c - 打印出编译时计算的常量的方法

c++ - 当内存分配函数用作条件语句时会发生什么

android - 如何忽略 LeakCanary 中的某些类?

c++ - 32 位 C++ 程序中的最大可寻址内存空间是多少?