mktime和localtime导致分段错误,如何正确初始化?

时间:2019-06-19 19:44:24

标签: c time.h

我具有在较大的程序中反复调用的以下功能:

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来进行检查。

根据this answer“与localtime一起的陷阱是指向静态全局变量的指针,随后对localtime的调用将更新变量。”

我很怀疑重复调用mktime会导致这种现象,因此通过添加静态计数器变量,这会在第94次调用时发生。

有什么方法可以防止功能time.h遭受这种干扰?

0 个答案:

没有答案