首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在退出处理程序中使用QDateTime::toString()失败

在退出处理程序中使用QDateTime::toString()失败
EN

Stack Overflow用户
提问于 2020-06-18 20:51:58
回答 1查看 138关注 0票数 0

我尝试在我的GCC10编译的Qt5应用程序中记录std::exit调用。将QDateTime对象转换为字符串时,此操作失败。它可以用以下代码片段重现:

代码语言:javascript
复制
void exitHandler() noexcept
{
   QString b = QDateTime::currentDateTime().toString();
}

int main(int pArgc, char* pArgv[]) noexcept
{
   std::atexit(&exitHandler);
   QString a = QDateTime::currentDateTime().toString();
   std::exit(1);

   return 0;
}

当变量b为空时,变量a包含预期的日期/时间。当使用UTC时间时,b为“GMT”。我不知道出口处理程序有任何相关的限制。

有人能告诉我这里出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-22 04:16:13

退出处理程序是在静态变量反初始化之后调用的,因此调用可能访问静态变量的函数是不安全的。

例如,toString()可能会使用qdatetime.cpp包含至少一个星期几的静态查找表。在调用堆栈上可能会有更多对静态变量的访问(已经被销毁)。

如果您在退出处理程序中确实需要这种信息,您可以分配一个静态的字符数组(没有new),并从main函数中写入日期字符串。我没有尝试过,但我希望.bss段中的内存在退出时不会清零,并且在全局反初始化后访问它仍然是安全的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62450411

复制
相关文章

相似问题

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