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