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

Do I need to free the returned pointer from localtime() function?

我目前正在阅读有关 time.h 的联机帮助页。我做到了这一点:

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

现在我可以工作了,尽可能好,但我没有找到信息,如果我有责任 free() 变量 local 或不。

引用 man page

The four functions asctime(), ctime(), gmtime() and localtime() return a pointer to static data and hence are not thread-safe. [...]

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

查看仿生库 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);
}

这里是return静态结构tm的地址。

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