本地时间的内存需要被释放吗?

24
void log(){
    time_t current = time(0);
    tm *ptm = localtime(&current);
        stuf...
}

只是想确认一下 - 我需要在方法结束时释放分配给 tm 指针的内存吗?


2个回答

27
不,你不应该释放它,这个结构体是静态分配的。
请参考文档返回值: 在成功的情况下返回指向静态内部std::tm对象的指针,否则返回NULL。该结构体可能被std::gmtimestd::localtimestd::ctime共享,并且可能在每次调用时被覆盖。

静态分配是什么意思?难道不是由 localtime 实现在堆上分配的吗? - Avihai Marchiano
@user1495181:为您添加了参考。 - Alok Save
哦,谢谢!我错过了这个信息,现在我知道本地时间不是线程安全的。:( - Avihai Marchiano
2
@user1495181:Posix有localtime_r,它是线程安全的。您需要传递指向struct tm结果的指针。但它不在标准C ++中。在最新的C版本(C11)中有一个名为localtime_s的函数可以实现同样的功能。 - Steve Jessop
@user1495181 它可能是线程安全的。例如,在MSVC++中,此结构针对每个线程进行维护。请查阅您编译器的文档。 - Rost

8
不应该这样做。这个结构是静态分配的,并且由gmtimelocaltime函数共享。每次调用这两个函数之一时,此结构的内容都会被重写。
因此,要小心结果 - 例如,立即复制它们,不要存储指针。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接