Вернулась ли функция struct localtime() для освобождения?

struct tm *localtime(const time_t *timep);

Я проверил man localtime, но нет слов о том, должен ли мой долг очищать его после использования.

И на самом деле у меня много подобных сомнений в функциях, возвращающих указатель, как вы определяете его, должно быть освобождено или нет?

Ответ 1

Эта информация должна быть на странице руководства - моя страница localtime говорит:

Возвращаемое значение указывает на статически выделенная структура...

Статически выделенные объекты не должны передаваться в free(), так что это ваш ответ - нет, вы не должны освобождать возвращаемое значение localtime().

Единственный способ рассказать в общем случае - обратиться к документации или реализации рассматриваемой функции.

Ответ 2

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

Лучше использовать форму _r этих функций, т.е. localtime_r()