【问题标题】:Does memory for localtime need to be deallocated?是否需要释放本地时间的内存?
【发布时间】:2012-08-31 09:15:44
【问题描述】:
void log(){
    time_t current = time(0);
    tm *ptm = localtime(&current);
        stuf...
}

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

【问题讨论】:

标签: c++ memory-management


【解决方案1】:

不,你不应该释放它,结构是静态分配的。

查看documentation

返回值
成功时指向静态内部 std::tm 对象,否则为 NULL。该结构可以在std::gmtimestd::localtimestd::ctime 之间共享,并且可以在每次调用时被覆盖。

【讨论】:

  • 静态分配是什么意思?它不是由本地时间实现在堆上分配的吗?
  • @user1495181:为您添加了参考。
  • 哦,谢谢,我错过了,现在我知道本地时间不是线程安全的。:(
  • @user1495181:Posix 有 localtime_r,这是线程安全的。你传入一个指向struct tm 结果的指针。但它不在标准 C++ 中。它在最新版本的 C (C11) 中,为localtime_s
  • @user1495181 它可能是线程安全的。例如。在 MSVC++ 中,每个线程都维护这个结构。检查您的编译器文档。
【解决方案2】:

不,你不应该。此结构由函数gmtimelocaltime 静态分配和共享。每次调用其中任何一个函数时,都会覆盖此结构的内容。

所以要小心结果 - 例如。立即复制它们,不要存储指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2021-08-20
    • 2021-01-14
    • 2023-03-29
    相关资源
    最近更新 更多