У меня есть следующая функция, которая неоднократно вызывается в более крупной программе:
double troublesome_function() {
time_t time_ini = time(NULL);
struct tm tm_ini = *localtime(&time_ini);
(...)
time_t secs_passed;
secs_passed = mktime(&tm_ini);
double return_value =0;
return_value = (double)secs_passed;
return(return_value);
}
В большинстве случаев она работает просто отлично.Но в некоторых случаях строка *localtime(&time_ini)
вызывает ошибку сегментации.Удаление этой инициализации из tm_ini
кажется нормальным, но в большинстве случаев код снова будет работать нормально, но строка mktime(&tm_ini)
вызовет ошибку сегментации.Наконец, операция возврата также может быть ошибкой, которую я проверил, добавив printf
s к коду.
Согласно этому ответу "Одна ошибка с localtime
- возвращенный указатель является указателем на статическую глобальную переменную var и последующие вызовы localtime
обновляют переменную."
Я подозреваю, что повторяющиеся вызовы mktime
вызывают такое поведение, поэтому, добавляя статическую переменную-счетчик, это происходит при 94-м вызове.
Любой способпредотвратить функции от time.h
от этого вмешательства?