【问题标题】:GTK-Builder memory leaks when load a file created with Glade加载使用 Glade 创建的文件时 GTK-Builder 内存泄漏
【发布时间】:2016-08-16 23:43:14
【问题描述】:

我首先向所有我的英语不好的人道歉。当我使用 gtk_builder_add_from_files (builder, "interface.xml" & err) 启动我的 GTK 小部件时,我没有任何错误,但出现了这些内存泄漏:

我花了两天时间寻找解决方案,但徒劳无功。或者有人会有一个想法已经遇到了这个问题?

Leak: 0x7fa3c9d49dd0  size=16  zone: DefaultMallocZone_0x109274000     length: 3  "hfs"
Leak: 0x7fa3c9e25a20  size=16  zone: DefaultMallocZone_0x109274000     length: 7  "<ctrl>v"
   Leak: 0x7fa3c9e28280  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>F"
   Leak: 0x7fa3c9e569f0  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
   Leak: 0x7fa3c9e5d5f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>x"
   Leak: 0x7fa3c9e5f910  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
   Leak: 0x7fa3c9e6e930  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
   Leak: 0x7fa3c9e76400  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
   Leak: 0x7fa3c9e8c3f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
Leak: 0x7fa3c9ea84c0  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
Leak: 0x7fa3c9ea9df0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
Leak: 0x7fa3c9eaadf0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>F"
Leak: 0x7fa3c9eaf990  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
Leak: 0x7fa3c9eaf9a0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
Leak: 0x7fa3c9eaf9f0  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
Leak: 0x7fa3c9eb0030  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>v"
Leak: 0x7fa3c9eb1540  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>c"
Leak: 0x7fa3c9eb21f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>f"
Leak: 0x7fa3c9eb2460  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
Leak: 0x7fa3c9eb25f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
Leak: 0x7fa3c9eb2df0  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
Leak: 0x7fa3c9eb49f0  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
Leak: 0x7fa3c9eb75f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>v"
Leak: 0x7fa3c9eb7bf0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>f"
Leak: 0x7fa3c9eb83f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
Leak: 0x7fa3c9ec11f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
Leak: 0x7fa3c9ec25f0  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
Leak: 0x7fa3c9ec31f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>c"
Leak: 0x7fa3c9ec3df0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>c"
Leak: 0x7fa3c9ecab90  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>c"
Leak: 0x7fa3c9ecd5f0  size=16  zone: DefaultMallocZone_0x109274000  length: 14  "<shift><ctrl>a"
Leak: 0x7fa3c9ecd9f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>a"
Leak: 0x7fa3c9edc9f0  size=16  zone: DefaultMallocZone_0x109274000  length: 7  "<ctrl>x"
Leak: 0x7fa3c9f07fb0  size=16  zone: DefaultMallocZone_0x109274000  length: 12  "/dev/disk0s2"
Leak: 0x7fa3c9f9c500  size=16  zone: DefaultMallocZone_0x109274000  length: 10  "(646, 267)"

我在 mac os X El Capitan 上使用“泄漏”程序获取此日志,但我无法使用 valgrind。当他试图启动该程序时,他崩溃了。 :(

感谢您的宝贵时间和美好的一天。

【问题讨论】:

  • 您确定这些是 true 泄漏,而不仅仅是在应用程序的生命周期内保持分配的内存吗?对于应用程序而言,无需显式释放其整个生命周期所需的内存会更有效——当它退出时,操作系统无论如何都会解除分配所有内容。查看 Gtk+ 参考手册;它可能有一个可选的调试模式,在该模式下,它显式释放所有内容以使泄漏检查人员满意。

标签: c memory-leaks gtk builder glade


【解决方案1】:

首先你的 .gtkbuilder XML 是正确的吗?它按原样加载,没有适当的预检查或错误处理,任何错误都可能并且将导致泄漏或崩溃。考虑检查gtk_builder_add_from_file() 的返回码。如果它为零(这意味着错误),那么你就有问题了。

还要确保不要丢失指向 GtkBuilder 的指针。如果你想删除它,你必须这样做g_object_unref()

除此之外,您不必担心 GtkBuilder 如何管理内存。

【讨论】:

  • 您好,我已经在我的代码中检查了 gtk_builder_add_from_file() 的返回码,并在生成小部件后使用了 g_object_unref()。也许使用 Glade 生成的 XML 是不正确的……我在 GNOME GTK+3 文档上阅读了不正确的文件会导致内存泄漏。感谢您的回复和您的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多