我有 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
?