我在下面的函数中有一个EXC_BAD_ACCESS:
time_t dateTime(getCurrentTimestamp());
tm *calculatedTime;
calculatedTime = localtime(&dateTime);
tm *dateTimeCopy = new tm();
memcpy(dateTimeCopy, calculatedTime, sizeof(tm));
return dateTimeCopy;
EXC_BAD_ACCESS发生在localtime()中。哪个我无法解释。如果我将当地时间更改为gmtime,它工作得很好。这种行为可能是什么原因?
编辑:修正了此代码中的错误。正如Rufflewind所说。然而,崩溃仍然存在。
编辑2:使用localtime_r它也可以正常工作。我可能会最终使用它,如下所示:
time_t dateTime(valueDateTime);
tm *dateTimeCopy = new tm();
localtime_r(&dateTime, dateTimeCopy);
答案 0 :(得分:3)
这一行很可疑:
memcpy(dateTimeCopy, &calculatedTime, sizeof(tm));
请注意
dateTimeCopy
的类型为struct tm *
,而&calculatedTime
的类型为struct tm **
。你可能意味着:
memcpy(dateTimeCopy, calculatedTime, sizeof(tm));
答案 1 :(得分:0)
正如上面的评论所述,我们完全不使用localtime
功能。它访问共享内存,似乎不是线程保存或有其他问题(至少在clang / ios / mac os中)。
我们开始使用localtime_r
或类似功能,这些功能似乎没有问题。以下是我在问题本身中发布的代码:
time_t dateTime(valueDateTime);
tm *dateTimeCopy = new tm();
localtime_r(&dateTime, dateTimeCopy);
答案 2 :(得分:0)
我也遇到了当地时间的崩溃。我通过将memcpy_s函数与本地时间配合使用来解决了崩溃问题,例如:
time_t dateTime(getCurrentTimestamp());
tm calculatedTime;
memcpy_s(&calculatedTime,sizeof(tm),localtime(&dateTime),sizeof(tm));