我目前正在阅读有关time.h
的联机帮助页。我到目前为止:
time_t now = time(0);
struct tm * local = localtime(&now);
现在我可以按时间工作,但是我没有找到这些信息,如果free()
变量local
是我的责任。
答案 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。
所以我们不需要释放它。该系列的其他功能也可以访问该全局静态结构,因此它不是线程安全的。