gpt4 book ai didi

c - gdk_pixbuf_new_from_file() 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:40 24 4
gpt4 key购买 nike

Valgrind 报告一个 memory leak当我运行这个简单的测试程序时:

#include <gdk-pixbuf/gdk-pixbuf.h>
int main() {
GdkPixbuf* buf;
GError* err = NULL;
buf = gdk_pixbuf_new_from_file("test.jpg", &err);
g_assert_no_error(err);
g_object_unref(buf);
return 0;
}

我知道有关 Valgrind 和 GLib/GDK/GTK 的问题,以及关于此问题的几个 StackOverflow 答案(例如 this onethis other one 等)。

对于 GLib,在 valgrind 命令前加上 G_DEBUG=gc-friendly G_SLICE=always-malloc 就足够了(尽管我仍然有一些“仍然可以到达”的漏洞,这如果它们来自 GLib,我会忽略)。

但是,通过这个小程序,我得到了很多 "possibly lost" leaks .我还尝试了其他前缀,例如 G_DEBUG=resident-modules (建议 here )和 G_SLICE=debug-blocks (建议 here ),但是“可能丢失”泄漏仍然存在。我还尝试了几个 GNOME suppressions ,即 GDK 之一,但无济于事。

我的问题是:我唯一的选择是为这种情况创建抑制文件还是代码有问题?

程序是用以下代码编译的:

gcc -Wall -std=c99 -g -pedantic `pkg-config --cflags glib-2.0 gdk-pixbuf-2.0` pixbuf.c -o pixbuf `pkg-config --libs glib-2.0 gdk-pixbuf-2.0`

我正在使用 GDK-Pixbuf 2.30.7 (Ubuntu 14.04)。

提前致谢。

最佳答案

我看到的所有“可能丢失”的 block 都是在类型注册到 GObject 时产生的。这些确实仍然可以访问,只是 valgrind 不明白如何访问它们(诚然这有点奇怪,我不怪 valgrind 混淆),所以它报告它们为“可能丢失”而不是“仍然”可达”。

您的代码没有任何问题,并且在 glib 中也没有真正的泄漏。您应该使用抑制文件。

关于c - gdk_pixbuf_new_from_file() 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25342220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com