Нужно ли освобождать возвращаемую структуру localtime ()? - PullRequest
6 голосов
/ 02 июня 2011
struct tm *localtime(const time_t *timep);

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

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

Ответы [ 2 ]

8 голосов
/ 02 июня 2011

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

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

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

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

1 голос
/ 02 июня 2011

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

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

...