关于ffmpeg内存管理函数av_malloc和av_free/av_freep
最近在项目中,需要自己在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相关推荐
- FFmpeg内存管理
FFmpeg 是一个 C程序的项目,C语言是需要手动管理内存的.内存管理有一个技巧,只要你分清楚这个变量是在栈上,还是在堆上的就可以了.在栈上的变量不需要手动释放,而在堆上的变量需要自己释放. 下面通 ...
- FFMPEG4.1源码分析之 内存管理APIs av_malloc() av_mallocz()
1 av_malloc() av_malloc() 声明: 所属库:libavutil,该库是ffmpeg的功能库,提供了线程,内存,文件,加密等功能 头文件:libavutil/mem.h 该函数 ...
- 嵌入式C语言基础知识查漏补缺--内存管理函数指针数组
内存管理: 堆和栈的理解和区别 局部变量 静态局部变量 全局变量 静态全局变量 作用域 在定义变量的{}之内有效 在定义变量的{}之内有效 整个工程,所有文件 当前文件 生命周期 程序运行至变量定义处 ...
- Linux中free函数头文件,Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解...
C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...
- c语言入门-内存管理函数
目录 memcpy-内存拷贝函数 memmove-内存拷贝 memcmp-内存比较 memset-初始化函数 memcpy-内存拷贝函数 头文件:string.h 函数原型:void *memcpy( ...
- linux内存管理函数mmap和brk,brk() 和 mmap() 内存映射
参考博文:http://www.cnblogs.com/huxiao-tee/p/4660352.html x86平台下linux进程虚拟地址空间分布(2.6.7以前版本) mmap区域与栈区域相对增 ...
- 深入探讨PHP中的内存管理问题
一. 内存 在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改 ...
- C和C++安全编码笔记:动态内存管理
4.1 C内存管理: C标准内存管理函数: (1).malloc(size_t size):分配size个字节,并返回一个指向分配的内存的指针.分配的内存未被初始化为一个已知值. (2).aligne ...
- 替换libc中的内存分配函数
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 本文介绍如何替换glibc中的内存分配函数为自定义的内存分配函数的方法,可以方便调试内存分配,和查找内存管理错误而产生 ...
最新文章
- CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...
- JS类型判断、对象克隆、数组克隆
- Swift语言快速入门
- HDU-5895 Mathematician QSC
- 2020牛客国庆集训派对day2 MATRIX MULTIPLICATION CALCULATOR
- c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...
- 零基础学sql要多久_零基础小白如何迈出学习SQL的第一步?文科生学SQL的心得
- opencv+python 自动绿帽机
- alert弹框里弹一个表格_Python学习第十三弹 输入与输出
- 加壳及脱壳《逆向工程》
- 华硕笔记本电池软件_成色配置都还不错的二手华硕7代 i5 笔记本电脑 只卖1599元 想要的 快进来看看...
- 我花了一夜用数据结构给女朋友写个H5走迷宫游戏
- deepin Linux 安装 tar,Linux Deepin 15.11安装更新firefox flash player
- 谱尼医学幽门螺旋杆菌快速检测 三步直达 欢迎选测~
- git cherry-pick操作
- 2697v3只支持服务器内存,Intel 18核心E5-2697 v4实测:虐杀桌面顶级8核i7-5960X!
- Inter无线网卡AC 3165无法开启wifi共享的问题
- 云端守望者(上):十二道难关
- win11中wsa使用fiddler抓包(https)
- Word VBA(批量复制Excel表格和Word表格到Word中)