Скажем, я пишу такую ​​функцию, как strdup (), или любую другую функцию, которая использует malloc () в этом отношении. Если я вызываю эту функцию только внутри printf () следующим образом:

printf("%s", my_function(arg));

Можно ли освободить значение, возвращаемое функцией? Если да, то как? Насколько мне известно, free () принимает в качестве аргумента указатель void, но как получить этот указатель, если вы никогда не сохраняете возвращаемое значение в переменной?

2
matteobu02 18 Сен 2021 в 02:00

1 ответ

Нет, вам нужно будет назвать это так:

char *p;

p = my_function(arg);
printf("%s", p);
free(p);

РЕДАКТИРОВАТЬ

Если вы злоупотребляете кодом, вы можете сделать что-то вроде:

for(char *p = my_function(arg); p != NULL ; free(p), p = NULL)
  printf("%s", p);

Но это просто ужасно ...

3
Bob Jarvis - Reinstate Monica 17 Сен 2021 в 23:12