gpt4 book ai didi

c++ - ffmpeg 中的 av_free* 函数是幂等的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:26 26 4
gpt4 key购买 nike

具体来说,我正在查看 avformat_free_context。在我的代码的正常执行中,avformat_free_context 被适本地调用。我还想在类的析构函数中调用它,以防出现异常情况导致使用 AVFormatContext 的代码提前返回。当调用已释放的数据结构时,ffmpeg 自由函数的行为是否适当?

最佳答案

不,不是所有的都是。

链接指向函数定义;你自己看看吧!

av_freep

avformat_free_context电话 av_freepAVFormatContext 持有的一些指针上,在将要释放的内存地址传递给 av_free 之前不执行 NULL 检查(本质上只是对 free 的调用;见下文)。但是,它确实将指针设置为 NULL。

av_free

如果 ffmpeg 编译时定义了 CONFIG_MEMALIGN_HACKav_free 将在释放前进行 NULL 检查。这将有效地使 av_freepav_freep(&pointer_to_data); 释放的内存具有幂等性。对于您的构建,情况可能并非如此。

其他

此外,avformat_free_context 调用的其他一些函数是幂等的。他们通过清除指针和执行 NULL 检查,或减少数组索引以防止双重释放来实现这一点。示例包括 ff_free_streamav_opt_free .

avformat_free_context

avformat_free_context 将在尝试释放上下文之前执行 NULL 检查。因此,如果您将 NULL 传递给它,则不必担心。但是,如果您双重释放 AVFormatContext,您最终执行低级双重释放,因为 avformat_free_context 调用 av_free 直接在 AVFormatContext 上。

建议

释放上下文时最安全的做法是:

avformat_free_context(pcontext);
pcontext = NULL;

关于c++ - ffmpeg 中的 av_free* 函数是幂等的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com