gstreamerでメモリリークが発生しました:
#include <iostream>
#include <string.h>
#include <glib.h>
#include <gst/gst.h>
using namespace std;
void info(const GstElement *const element)
{
cout << "count: " << GST_OBJECT_REFCOUNT(element) << endl;
cout << "disposing: " << GST_OBJECT_IS_DISPOSING(element) << endl;
}
int main()
{
gst_init(NULL,NULL);
GstElement *element = gst_pipeline_new("src");
info(element);
gst_object_unref(element);
info(element);
gst_deinit();
return 0;
}
valgrindでコードを制御すると、次の結果が得られます。
== 9098 ==コマンド:./ test_gstreamer == 9098 == カウント:1 処分:0 カウント:0 処分:0 == 9098 == == 9098 ==ヒープの概要: == 9098 ==終了時に使用中:2,199ブロックで1,364,118バイト == 9098 ==合計ヒープ使用量:21,877の割り当て、19,678の解放、3,899,417バイトの割り当て == 9098 == == 9098 ==リークの概要: == 9098 ==間違いなく失われました:1ブロックで60バイト == 9098 ==間接的に失われました:10ブロックで240バイト == 9098 ==失われる可能性があります:880ブロックで543,952バイト == 9098 ==まだ到達可能:1,308ブロックで819,866バイト == 9098 ==抑制:0ブロックで0バイト == 9098 == --leak-check = fullを指定して再実行し、リークされたメモリの詳細を確認します == 9098 == == 9098 ==検出および抑制されたエラーのカウントについては、-vを指定して再実行します。 == 9098 ==エラーの概要:0コンテキストからの0エラー(抑制:2から2)
なぜgst_object_unref
すべてのメモリを解放しないのですか?GST_OBJECT_IS_DISPOSING
後にfalseを返すのはなぜgst_object_unref
ですか?