我是否需要释放 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的地址。
所以我们不需要释放它。并且该系列的其他函数也访问该全局静态结构,因此它不是线程安全的。
我目前正在阅读有关 time.h
的联机帮助页。我做到了这一点:
time_t now = time(0);
struct tm * local = localtime(&now);
现在我可以工作了,尽可能好,但我没有找到信息,如果我有责任 free()
变量 local
或不。
引用 man page
The four functions
asctime()
,ctime()
,gmtime()
andlocaltime()
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的地址。
所以我们不需要释放它。并且该系列的其他函数也访问该全局静态结构,因此它不是线程安全的。