我的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_DISPOSINGgst_object_unref之后返回false?

最佳答案

您可以尝试将主要内容更改为此吗:

gst_init(NULL,NULL);
GstElement *element = gst_pipeline_new("src");
info(element);
gst_element_set_state (element, GST_STATE_NULL);
gst_object_unref(element);
info(element);
return 0;

认为这可能有效。

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

10-10 11:41