Динамический массив: практики безопасного освобождения памяти

Всем привет. Расскажите, пожалуйста, какие есть лучшие способы освобождения памяти в случае, если функция возвращает указатель на выделенную память по calloc или malloc?

Например:

long long *tribonacci(const long long signature[3], size_t n) 
{
    long long *tribonacci_array = calloc(n,sizeof(long long));
    if(n!=0)
    {
    for (size_t i=0; i<n;i++)
    {
        if(i<3)
        {tribonacci_array[i]=signature[i];}
        else
        {tribonacci_array[i]=tribonacci_array[i-1]+tribonacci_array[i-2]+tribonacci_array[i-3];}
    }
    return tribonacci_array;
    }
    else{return NULL;}
}

И пусть в main есть вызов этой функции:

int main()
{
    long long signature[3] = {3,2,1};
    for (int i = 0; i<10; i++)
    {printf("%d ; ", tribonacci(signature,10)[i]);}
    return 0;
}

Тут функция вызовется аж 10! раз, 10 раз выделится память, а освобождать когда/как? Или есть только одна практика: создай переменную --> примени функцию --> использую где надо переменную --> освободи память?

Спасибо за ответ и не съешьте пж за затуп.


Ответы (0 шт):