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