我具有在较大的程序中反复调用的以下功能:
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
遭受这种干扰?