(一)av_malloc_array函数的定义
av_malloc_array函数定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的源文件libavutil/mem.c中:
void *av_malloc_array(size_t nmemb, size_t size)
{
size_t result;
if (size_mult(nmemb, size, &result) < 0)
return NULL;
return av_malloc(result);
}
该函数作用是:给数组分配大小为nmemb x size字节的内存。
形参nmemb:数组中元素的个数
形参size:数组中单个元素的大小,单位为字节。
返回值:成功返回一个指针,该指针指向分配的内存块,即指向已被分配内存的数组的开头;失败返回NULL。
(二)av_malloc_array函数的内部实现分析
av_malloc_array函数内部,首先通过size_mult函数检查形参nmemb和形参size相乘是否会溢出,并把它们相乘的结果保存到局部变量result中,如果溢出,返回NULL:
if (size_mult(nmemb, size, &result) < 0)
return NULL;
如果没有溢出,通过av_malloc函数分配内存块:
return av_malloc(result);