最近在项目中,需要自己在ffmpeg中实现一个滤镜,用到了大块内存的申请和释放。

于是用ffmpeg申请接口av_malloc,申请,释放使用的av_freep。

然后问题就来了,莫名其妙的core掉了。怎么也查不到原因,最后看到ffmpeg 的mem.h头文件中的注释,

av_malloc 申请的内存是用av_free释放的,为啥呢?

先看看av_freep 函数,这个函数有点误导人。

void av_freep(void *arg)
{
    void *val;

memcpy(&val, arg, sizeof(val));//这里memcpy相当于解引用, val = *arg;
    memcpy(arg, &(void *){ NULL }, sizeof(val)); // 同上 *arg = NULL;
    av_free(val); // free(*arg);
}

//所以看出来什么没有,这个函数释放二级指针,把一级指针传递进去释放,当然会有问题。

av_free 没什么特别的,就是普通的释放。

这里用memcpy是因为,传进来的void *参数。已经和内部类型不匹配了。为什么这里传递void *arg而不是void **arg呢?因为如果void **arg,这个指针不是任意指针类型都能给其赋值的。只有void *arg是任何类型都可以适配的。

关于ffmpeg内存管理函数av_malloc和av_free/av_freep相关推荐

  1. FFmpeg内存管理

    FFmpeg 是一个 C程序的项目,C语言是需要手动管理内存的.内存管理有一个技巧,只要你分清楚这个变量是在栈上,还是在堆上的就可以了.在栈上的变量不需要手动释放,而在堆上的变量需要自己释放. 下面通 ...

  2. FFMPEG4.1源码分析之 内存管理APIs av_malloc() av_mallocz()

    1  av_malloc() av_malloc() 声明: 所属库:libavutil,该库是ffmpeg的功能库,提供了线程,内存,文件,加密等功能 头文件:libavutil/mem.h 该函数 ...

  3. 嵌入式C语言基础知识查漏补缺--内存管理函数指针数组

    内存管理: 堆和栈的理解和区别 局部变量 静态局部变量 全局变量 静态全局变量 作用域 在定义变量的{}之内有效 在定义变量的{}之内有效 整个工程,所有文件 当前文件 生命周期 程序运行至变量定义处 ...

  4. Linux中free函数头文件,Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解...

    C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...

  5. c语言入门-内存管理函数

    目录 memcpy-内存拷贝函数 memmove-内存拷贝 memcmp-内存比较 memset-初始化函数 memcpy-内存拷贝函数 头文件:string.h 函数原型:void *memcpy( ...

  6. linux内存管理函数mmap和brk,brk() 和 mmap() 内存映射

    参考博文:http://www.cnblogs.com/huxiao-tee/p/4660352.html x86平台下linux进程虚拟地址空间分布(2.6.7以前版本) mmap区域与栈区域相对增 ...

  7. 深入探讨PHP中的内存管理问题

    一. 内存 在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改 ...

  8. C和C++安全编码笔记:动态内存管理

    4.1 C内存管理: C标准内存管理函数: (1).malloc(size_t size):分配size个字节,并返回一个指向分配的内存的指针.分配的内存未被初始化为一个已知值. (2).aligne ...

  9. 替换libc中的内存分配函数

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 本文介绍如何替换glibc中的内存分配函数为自定义的内存分配函数的方法,可以方便调试内存分配,和查找内存管理错误而产生 ...

最新文章

  1. CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...
  2. JS类型判断、对象克隆、数组克隆
  3. Swift语言快速入门
  4. HDU-5895 Mathematician QSC
  5. 2020牛客国庆集训派对day2 MATRIX MULTIPLICATION CALCULATOR
  6. c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...
  7. 零基础学sql要多久_零基础小白如何迈出学习SQL的第一步?文科生学SQL的心得
  8. opencv+python 自动绿帽机
  9. alert弹框里弹一个表格_Python学习第十三弹 输入与输出
  10. 加壳及脱壳《逆向工程》
  11. 华硕笔记本电池软件_成色配置都还不错的二手华硕7代 i5 笔记本电脑 只卖1599元 想要的 快进来看看...
  12. 我花了一夜用数据结构给女朋友写个H5走迷宫游戏
  13. deepin Linux 安装 tar,Linux Deepin 15.11安装更新firefox flash player
  14. 谱尼医学幽门螺旋杆菌快速检测 三步直达 欢迎选测~
  15. git cherry-pick操作
  16. 2697v3只支持服务器内存,Intel 18核心E5-2697 v4实测:虐杀桌面顶级8核i7-5960X!
  17. Inter无线网卡AC 3165无法开启wifi共享的问题
  18. 云端守望者(上):十二道难关
  19. win11中wsa使用fiddler抓包(https)
  20. Word VBA(批量复制Excel表格和Word表格到Word中)

热门文章

  1. response输出文件的时候,解决迅雷下载的问题
  2. OV4689摄像头(MIPI)配置代码
  3. 联想Phab2 Pro Tango手机测评
  4. 森林防火应急指挥GIS系统森林防火监测预警系统
  5. OUC_SE_Group014_Blog4
  6. 并行分布式计算 并行机系统互联网络
  7. 软件测试之如何做好回归测试
  8. Pytorch中的DDP
  9. 易语言制作提示类对话框
  10. 《阿凡达2》上映在即,3D渲染如何突破想象?