Я написал небольшой пример задачи, чтобы узнать о распределении памяти и освобождении этой памяти (для защиты от утечек памяти):
#include <stdlib.h>
long* foo(char str[]) {
long *nums;
nums = calloc(2,sizeof(long));
//something is happening depending on what's inside the char[]
nums[0] = 57347534;
nums[1] = 84757;
return nums;
}
int main() {
char str1[400] = "This is a test";
long* retValue = foo(str1);
//some lines of checking content of "retValue"
char str2[400] = "This is another test";
retValue = foo(str2);
//some more lines of checking content of "retValue"
char str3[400] = "This is a final test";
retValue = foo(str3);
//again some more lines of checking content of "retValue"
free(retValue);
}
Итак, в моей функции main
я использую три массива символовкоторый я перейду к моей функции.Эта функция имеет num указатель длинных значений, где я calloc
два из них.Затем я просто вычисляю некоторые числа в соответствии с содержанием в str[]
и возвращаю nums
.
Мои вопросы по этому поводу:
- Как освободить память, которую я использовалдля
nums
?Потому что я не могу освободить его, прежде чем использовать его для возврата. - Правильно ли освободить
retValue
в последней строке там? - Прав ли я, что мне не нужно освобождать моймассивы символов, потому что они не являются динамическими?
Спасибо за ваши ответы, это помогло бы мне более безопасно использовать указатели!