この簡単なテスト プログラムを実行すると、Valgrind がメモリ リークを報告します。
#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 の回答 (これ、この他のもの、およびその他) を認識しています。
valgrind
GLib の場合は、コマンドの前にプレフィックスを付けるだけで十分G_DEBUG=gc-friendly G_SLICE=always-malloc
です (ただし、「まだ到達可能な」リークがいくつかありますが、それらが GLib からのものである場合は無視します)。
ただし、この小さなプログラムでは、多くの「失われた可能性がある」リークが発生します。G_DEBUG=resident-modules
(suggested here ) やG_SLICE=debug-blocks
(suggested here )などの他のプレフィックスも試しましたが、「失われた可能性がある」リークが残っています。また、いくつかのGNOME 抑制、つまり 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) を使用しています。
前もって感謝します。