首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个tm中的错误.结构腐蚀其他tm.结构

一个tm中的错误.结构腐蚀其他tm.结构
EN

Stack Overflow用户
提问于 2016-10-28 18:35:02
回答 1查看 230关注 0票数 0

我偶然发现了这种行为,并想知道这是否是意料之中的(在我看来不对)。

我强制错误在一个特定的tm-结构和所有其他被破坏。

这是代码(为了重现问题而将其简化为最小)。

代码语言:javascript
复制
int main()
{
    cout << "-----   Bug test - tm struc   -----" << endl;
    //--------------------------------------------

    //--- Setup struct tm ---
    time_t timet_Now = time(NULL);
    struct tm* tm1 = localtime(&timet_Now);
    struct tm* tm2 = localtime(&timet_Now);

    //--- Verify OK  -  cout shows "28/10/2016"---
    cout << tm1->tm_mday << " " << tm1->tm_mon << " " << tm1->tm_year << endl;
    cout << tm2->tm_mday << " " << tm2->tm_mon << " " << tm2->tm_year << endl;

    // ... so far, so good 

    // --- Force an error in a different tm struct (xxtm)
    time_t xtimet = 1464778020000;
    struct tm* xxtm = localtime(&xtimet);  //<<< xxtm = null - no runtime error

    //--- tm1 and tm2 are now corrupted - cout shows "-1/-1/-1"
    cout << tm1->tm_mday << " " << tm1->tm_mon << " " << tm1->tm_year << endl;
    cout << tm2->tm_mday << " " << tm2->tm_mon << " " << tm2->tm_year << endl;

    //--- This next line crashes the application, as tm1 is corrupted
    char* c = asctime(tm1);

    return 0;
}

崩溃错误是:未处理的MyTest.exe中0x0FA520B5 (MyTest.exe)异常:一个无效的参数被传递给一个认为无效参数是致命的函数。

EN

回答 1

Stack Overflow用户

发布于 2016-10-28 18:44:51

引用http://en.cppreference.com/w/cpp/chrono/c/localtime

返回值 指向成功的静态内部std::tm对象的指针,否则为NULL。该结构可以在std::gmtime、std::localtime和std::ctime之间共享,并且可以在每次调用中覆盖。

换句话说,您的所有struct tm *都指向了完全相同的位置。你可能想

代码语言:javascript
复制
struct tm tm1 = *localtime(&timet_Now);

如果你要在任何一段时间内保持它的话,就制作一份可以工作的副本。

肯尼·奥斯特罗姆在评论中提出了一个很好的观点。我没有处理空返回的情况和复制空..。不是个好主意。

代码语言:javascript
复制
struct tm * temp = localtime(&timet_Now);
if (temp == nullptr)
{
    // handle error. Throw exception, return, whatever, just don't run the next line 
}
struct tm tm1 = *temp;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40311247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档