我是否需要从localtime()函数释放返回的指针?

时间:2016-01-27 07:57:31

标签: c pointers time free

我目前正在阅读有关time.h的联机帮助页。我到目前为止:

time_t now = time(0);
struct tm * local = localtime(&now);

现在我可以按时间工作,但是我没有找到这些信息,如果free()变量local是我的责任。

2 个答案:

答案 0 :(得分:8)

引用man page

  

四个函数asctime()ctime()gmtime() localtime()返回指向静态数据的指针,因此不是线程安全的。 [...]

因此,您不需要free()返回的指针。

答案 1 :(得分:1)

在bionic lib c代码中查看localtime()的实现 一些代码来自它。 https://android.googlesource.com/platform/bionic/+/master/libc/tzcode/localtime.c

static struct tm    tm;

static struct tm *
localtime_tzset(time_t const *timep, struct tm *tmp, bool setname)
{
  int err = lock();
  if (err) {
    errno = err;
    return NULL;
  }
  if (setname || !lcl_is_set)
    tzset_unlocked();
  tmp = localsub(lclptr, timep, setname, tmp);
  unlock();
  return tmp;
}
struct tm *
localtime(const time_t *timep)
{
  return localtime_tzset(timep, &tm, true);
}

这里它返回静态结构的地址tm。

所以我们不需要释放它。该系列的其他功能也可以访问该全局静态结构,因此它不是线程安全的。