我的目的是创建一个相对简单的视频播放系统,用于我正在开发的大型程序中。视频解码器的相关代码是here。到目前为止我能做的最好的事情是缩小内存泄漏到这部分代码(或者我没有注意到在没有使用视频时发生任何内存泄漏)。
这可能是一个非常广泛的问题,我怎么不确定我所遇到的问题的范围,以及如何说出我的问题。
我想知道的是我错过了什么或做错了导致明显的内存泄漏(明显的是我的意思是我可以看到内存使用量每分钟爬升兆字节)。我已经尝试确保我所做的每个分配都与释放相匹配。
编辑1
这将在运行MSYS2(MinGW64)
答案 0 :(得分:1)
捕获泄漏的最佳方法是在编译器中使用内置的内存泄漏检查程序,如果可以使用它编译,则优于valgrind。
将此行添加到您的makefile:
CXXFLAGS += -fno-omit-frame-pointer -fsanitize=address -ggdb3 -O0
如果你使用旧版本的gcc(它不支持内存消毒器/检查器使用clang)。
我所知道的av_packet_unref
可能无法按预期工作,如果某些条件未得到满足(您可以在ffmpeg源代码内部阅读更多信息,无法记住它是其中一个头文件的名称)这些)。
编译完成后,让内存显着上升,然后使用 Ctrl + C 退出。内存清理程序将自动转储分配(而不是以后释放)内存的函数/行。如果您无法查看源代码行号,请使用addr2line
工具。
希望有所帮助。