FFmpeg源码:av_malloc_array、av_realloc_array函数分析-一、av_malloc_array函数

时间:2024-10-20 16:44:41

(一)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);