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

2023-12-01

以下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-bit, using 32-bit MinGW and GTK+.

我有一个类似的案例,没有gtk_widget_queue_draw (GTK_WIDGET (vbox));调用Timer功能。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 7 下 GTK 中 gtk_widget_queue_draw 中的内存泄漏 的相关文章

  • PARITY_NONE 是 C++ Windows 中的关键字吗?

    我正在使用 boost 编写一个串行库 并且我有一个枚举 enum parity t PARITY NONE PARITY ODD PARITY EVEN 我收到如下错误 错误 1 错误 C2059 语法错误 我无法弄清楚问题是什么 然后我
  • OpenMP 超线程导致性能不佳:如何将线程绑定到核心

    我正在开发大型密集矩阵乘法代码 当我分析代码时 它有时会达到我的四核系统的峰值失败率的 75 而其他时候则达到约 36 代码执行之间的效率不会改变 它要么从 75 开始 并继续保持该效率 要么从 36 开始 并继续保持该效率 我已将问题追溯
  • Windows 控制台支持 ANSI 吗?

    Windows 控制台支持 ANSI 控制字符吗 默认情况下它不支持许多 ANSI 控制字符 维基百科文章中也提到了这一点 http en wikipedia org wiki ANSI escape code http en wikipe
  • 如何在python中获取硬盘驱动器的序列号

    我尝试使用wmi来获取硬盘的序列号 我所做的是这样的 启动ipython并使用以下方式获取序列号 import wmi c wmi WMI for x in c Win32 PhysicalMedia print x 结果是这样的 inst
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 让 GCC 使用进位逻辑进行任意精度算术而不需要内联汇编?

    当使用任意精度算术 例如 512 位整数 时 有没有办法让 GCC 在不使用内联汇编的情况下使用 ADC 和类似指令 乍一看 GMP 的源代码表明他们只是为每个支持的平台提供了汇编实现 这是我编写的测试代码 它将命令行中的两个 128 位数
  • 第三方库应该放在哪里?

    我为一个相当规模的 C 项目 http github com nickgammon mushclient具有许多依赖关系 问题是 该项目包含其所有依赖项的源代码 例如 pcre zlib 等 我想将项目精简为与程序本身相关的内容 是否有一些
  • 如何在Windows 7中使用批处理脚本获取本地连接名称

    我正在编写一个简单的批处理脚本来检索 Windows 上的所有网络接口 但我只需要本地连接名称 本地连接接口名称不是默认名称 有没有办法使用批处理脚本仅检索本地连接名称作为字符串 不完全确定您在问什么 但我认为您的问题是您想要获取网络接口的
  • 添加到 .NET 任务栏中的右键单击应用程序菜单

    大多数应用程序只有 恢复 移动 调整大小 最小化 最大化和关闭 但是MS SQL提供了额外的选项 帮助 自定义视图 按照这些思路 是否可以添加到任务栏中应用程序的右键单击菜单 注 我是not指通知区域中时钟旁边的图标 这是一个更简单的ans
  • 命名管道客户端无法连接到作为网络服务运行的服务器

    我有一个服务在网络服务帐户下运行 该服务只是设置一个命名管道并侦听连接 NamedPipeServerStream listeningPipe new NamedPipeServerStream ourservicepipe PipeDir
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • 后台地理围栏 Windows Phone 8.1 (WinRT)

    Issue 我试图在 WP8 1 WinRT 中发生地理围栏事件 进入 退出 时触发后台任务 我已经编写了一个示例应用程序来尝试让它工作 但似乎无法做到这一点 到目前为止 我已采取以下步骤来尝试让地理围栏在后台运行 检查位置功能 创建 注册
  • 有什么工具可以了解 Windows 中正在运行的进程的布局(段)?

    我一直很好奇 该进程在内存中到底是什么样子的 其中有哪些不同的部分 部分 程序 在磁盘上 和进程 在内存中 到底是如何相关的 我之前的问题 有关可执行程序 进程 的内存布局的更多信息 https stackoverflow com ques
  • PSExec 中的会话 ID

    Psexec 无法在远程会话上为我显示记事本 GUI 因此 我尝试获取会话 ID 如下所示 c Users Amitra Downloads PSTools gt PsExec u administrator p force 135 20
  • PE 文件中的跳转存根

    最近我反汇编了一个DLL 用c c 编写 发现代码段内有很多 跳转存根 这些存根除了跳转到 DLL 内的函数之外什么也不做 eg jmp foo jmp foo2 为什么编译器 Visual studio 2012 在二进制文件中包含这些函
  • mfence 和 asm 易失性 ("" : : : "内存") 的区别

    据我了解 mfence是硬件内存屏障 而asm volatile memory 是编译器障碍 但是 可以asm volatile memory 用来代替 mfence 我感到困惑的原因是这个链接 http gcc gnu org ml gc
  • win32 GUI 应用程序在作为“app.exe --help”调用时将使用文本写入标准输出

    如何创建执行以下操作的 Windows 应用程序 当不使用命令行参数调用时 它是一个常规的 GUI 应用程序 指定可选的 help 命令行参数会导致应用程序将使用文本写入标准输出 然后终止 它必须是单个可执行文件 让控制台应用程序执行第二个
  • 为什么 Sleep() 会使后续代码减慢 40 毫秒?

    我最初是在 coderanch com 上询问这个问题的 所以如果您尝试在那里帮助我 谢谢 并且不必重复这个努力 不过 coderanch com 主要是一个 Java 社区 而且 经过一些研究 这似乎确实是一个 Windows 问题 因此
  • Cygwin 上的 GCC 与 MinGW 共存

    是否可以让两个版本的 GCC 共存 本机 Windows MinGW 版本和 cygwin linux 版本 当在 Cygwin 上系统尝试使用 MinGW 版本的 GCC 进行编译时 就会出现问题 反之亦然 如何保留两个版本的 GCC 心
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一

随机推荐