关于av_freep
来源:互联网 发布:多益网络招聘坑人 编辑:程序博客网 时间:2024/05/22 02:04
向av_freep传入的是指向某个内存区域的指针的地址(也可以说指向这个指针的指针)。
void av_freep(void *arg)
{void **ptr = (void **)arg;
av_free(*ptr);
*ptr = NULL;
}
这么设计应该是为了改变指针arg本身,所以函数内部ptr才被设计为指向指针arg的指针 的指针。
arg是个地址,该地址存放指向某个内存区域的指针的地址。 arg=&buffer,arg是指针buffer的内存地址。
void **ptr = (void **)arg; *ptr就是指向arg的指针。 *ptr=&arg
传入arg的地址给av_free,释放掉arg指向的内存地址,即指针buffer被释放掉,再也找不到指针buffer了。这时候buffer可能是野指针,置buffer为NULL。
void av_fifo_free(AVFifoBuffer *f)
{
if (f) {
av_freep(&f->buffer); //freep在调用了free之后,会置空指针。f->buffer 被释放,并置为NULL。
av_free(f); //指针f被释放。
}
}
============================
向av_freep传入的是指向某个内存区域的指针的地址(也可以说指向这个指针的指针)。
AVFifoBuffer *av_fifo_alloc(unsigned int size)
{
AVFifoBuffer *f= av_mallocz(sizeof(AVFifoBuffer));
if (!f)
return NULL;
f->buffer = av_malloc(size);
f->end = f->buffer + size;
av_fifo_reset(f);
if (!f->buffer)
av_freep(&f); //buffer分配失败,freep掉fifo,然后返回fifo。
return f;
}
void av_fifo_free(AVFifoBuffer *f)
{
if (f) {
av_freep(&f->buffer); //freep在调用了free之后,会置空指针。
av_free(f);
}
}
=======================================
真正看不懂的是av_free啊。。。
void av_free(void *ptr)
{
#if CONFIG_MEMALIGN_HACK
if (ptr) {
int v= ((char *)ptr)[-1];
av_assert0(v>0 && v<=ALIGN);
free((char *)ptr - v);
}
#elif HAVE_ALIGNED_MALLOC
_aligned_free(ptr);
#else
free(ptr);
#endif
}
======================
http://libav.org/doxygen/master/group__lavu__mem.html
Free a memory block which has been allocated with av_malloc(z)() or av_realloc().
- Parameters:
- ptr Pointer to the memory block which should be freed.
- Note:
- ptr = NULL is explicitly allowed.
- It is recommended that you use av_freep() instead.
- See also:
- av_freep()
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer pointing to it to NULL.
- Parameters:
- ptr Pointer to the pointer to the memory block which should be freed.
- See also:
- av_free()
- 关于av_freep
- av_free和av_freep的区别
- 关于
- 关于
- 关于++,--
- 关于#
- 关于。。。
- 关于
- 关于......
- 关于
- 关于
- 关于****
- 关于
- 关于!
- 关于++
- 关于
- 关于
- 关于$?
- java面向对象上:类、对象和包
- linux下svn命令大全
- 分析CDN加速对网站速度的提升作用
- 使用maven3 创建自定义的archetype
- 性能测试报告(实例)
- 关于av_freep
- oracle 10G 启动及关闭(Window/Unix)
- Hibernate保存数据自动生成主键出现奇怪异常Duplicate entry '0' for key 1
- 《Windows下Git的使用》
- linux和AIX下抓包的方法
- 转载——c# 大批量数据导出到excel[此为个人分享] [问题点数:20分,结帖人rocket2010]
- 短信发送器2
- 如何解决向容器里压入类的对象,但类的对象被析构的问题
- 几个经典递归问题(放苹果,红与黑,八皇后,木棍)