В вашем примере это подходящее место для этого. Простейшие бесплатные вызываются, когда вам больше не нужны данные. Сложность в моем опыте - это когда дела идут не так, как запланировано, или когда ваша программа может выйти несколькими способами.
Взгляните на эту фиктивную программу, которая не имеет абсолютно никакой реальной цели. Программа, которая принимает целое число, если это целое число имеет значение больше 10, программа добавит к нему 1 . Если нет, то она завершит работу всей программы с exit (1)
static void add_one_to_num(int *num)
{
if (*num < 10)
{
free(num);
exit(1);
}
*num = *num + 1;
}
int main()
{
int *num;
num = malloc(sizeof(int));
printf("Enter a number higher than 10: ");
scanf("%d", num);
add_one_to_num(num);
printf("num: %d\n", *num);
free(num);
return (0);
}
. В этой программе мы можем выйти с функцией add_one_to_num , поэтому вам нужноосвободить указатель в этом месте. Писая все больше и больше программ, вы поймете это, потому что это на самом деле очень логично и совсем не хаотично (для больших программ может быть боль в шее, чтобы отследить всю выделенную память во всех функциях, переданных указателям)к). Обязательно освобождайте их, когда вам больше не нужны данные или когда что-то меняет естественный поток вашей программы.