Multithreading 多线程视频解码器泄漏内存

Multithreading 多线程视频解码器泄漏内存,multithreading,memory-leaks,ffmpeg,hardware-acceleration,opengl-4,Multithreading,Memory Leaks,Ffmpeg,Hardware Acceleration,Opengl 4,我的目的是创建一个相对简单的视频播放系统,用于我正在开发的更大的程序中。视频解码器的相关代码为。到目前为止,我所能做的最好的事情就是将内存泄漏的范围缩小到这段代码,或者更确切地说,我没有注意到在不使用视频时发生任何内存泄漏 这可能是一个非常广泛的问题,无论我如何不确定我正在讨论的问题的范围,以及如何表达我的问题 我想知道的是,我错过了什么或做了什么错事,导致了明显的内存泄漏。我的意思是,我可以看到内存使用率每分钟攀升兆字节。我已经尝试确保我所做的每一次分配都与解除分配相匹配 编辑1 这是在运行M

我的目的是创建一个相对简单的视频播放系统,用于我正在开发的更大的程序中。视频解码器的相关代码为。到目前为止,我所能做的最好的事情就是将内存泄漏的范围缩小到这段代码,或者更确切地说,我没有注意到在不使用视频时发生任何内存泄漏

这可能是一个非常广泛的问题,无论我如何不确定我正在讨论的问题的范围,以及如何表达我的问题

我想知道的是,我错过了什么或做了什么错事,导致了明显的内存泄漏。我的意思是,我可以看到内存使用率每分钟攀升兆字节。我已经尝试确保我所做的每一次分配都与解除分配相匹配

编辑1
这是在运行MSYS2 MinGW64的Windows 10计算机上构建的,捕获泄漏的最佳方法是在编译器上使用内置内存泄漏检查器,如果可以使用它进行编译,这比valgrind要好得多

将此行添加到makefile:

CXXFLAGS += -fno-omit-frame-pointer -fsanitize=address -ggdb3 -O0
如果您使用的是不支持内存清洗剂/检查程序的旧版本gcc,请使用clang

我所知道的是av_packet_unref可能无法按预期工作,如果某些条件不满足,您可以阅读更多关于ffmpeg源代码的内部内容,记不起名称,这是其中一个头文件谈到的这些

编译后,让内存爬升,然后使用Ctrl+C退出。内存消毒器将自动转储分配了内存但未释放内存的函数/行。如果看不到源代码行号,请使用addr2line工具


希望这能有所帮助。

当我问问题时,我可能应该把这一点说清楚。我使用的是MSYS2提供的MinGW64。我还可以这样做吗?在命令行中使用gcc-v它应该提供gcc版本,我认为它应该有4.9.x或更高版本,那么你可能会有好运。如果我没有弄错的话,MinGW64使用的是windows版本的gcc.gcc版本7.2.0 Rev1,由MSYS2项目构建当我构建测试文件时,我得到以下错误D:/MSYS2/mingw64/bin/./lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../../../../../x86_64-w64-mingw32/bin/ld.exe:找不到-Lasan坏消息似乎是windows版本的gcc没有地址消毒器:如果您的代码是可移植的,并且不依赖于特定硬件,我愿意在我的ubuntu linux设置上测试你的代码。如果那样的话,给我一个git克隆地址。