Динамический массив: практики безопасного освобождения памяти
Всем привет. Расскажите, пожалуйста, какие есть лучшие способы освобождения памяти в случае, если функция возвращает указатель на выделенную память по 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 раз выделится память, а освобождать когда/как? Или есть только одна практика: создай переменную --> примени функцию --> использую где надо переменную --> освободи память?
Спасибо за ответ и не съешьте пж за затуп.