Сбой в localtime (), но gmtime () работает

У меня есть 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

Решение

Эта строка подозрительна:

memcpy(dateTimeCopy, &calculatedTime, sizeof(tm));

Обратите внимание, что

  • dateTimeCopy имеет тип struct tm *, в то время как
  • &calculatedTime имеет тип struct tm **,

Вы, вероятно, имели в виду:

memcpy(dateTimeCopy, calculatedTime, sizeof(tm));
3

Другие решения

Как указано в комментарии выше, мы полностью отошли от использования localtime функция. Он обращается к разделяемой памяти и, похоже, не сохраняет потоки или не имеет других проблем (по крайней мере, в clang / ios / mac os).

Мы переехали, чтобы использовать localtime_r или аналогичные функции, которые, кажется, работают без проблем. Вот код, который я также разместил в самом Вопросе:

time_t dateTime(valueDateTime);
tm *dateTimeCopy = new tm();
localtime_r(&dateTime, dateTimeCopy);
0

Я также испытал сбои с местным временем. Я исправил сбой, используя функцию memcpy_s с местным временем, например:

time_t dateTime(getCurrentTimestamp());
tm calculatedTime;
memcpy_s(&calculatedTime,sizeof(tm),localtime(&dateTime),sizeof(tm));
0
По вопросам рекламы [email protected]