mktime и localtime, вызывающие ошибку сегментации, как правильно инициализировать? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть следующая функция, которая неоднократно вызывается в более крупной программе:

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 от этого вмешательства?

...