2012-01-27 97 views
3

第一次(在我的新开发环境中),我看到valgrind抱怨mktime,但我不确定这是libc库,valgrind还是我的代码中的错误。我会从错误开始(下面) - 是否有足够的信息来解释原因?valgrind抱怨__mktime - 是我的错吗?

==3682== at 0x38ACE9A505: __mktime_internal (in /lib64/libc-2.12.so) 
==3682== by 0x4D66F7: ??? 
==3682== by 0x4D7611: ??? 
==3682== by 0x4D23CD: ??? 
==3682== by 0x4D175B: ??? 
==3682== by 0x38ACE1ECDC: (below main) (in /lib64/libc-2.12.so) 
==3682== Uninitialised value was created by a stack allocation 
==3682== at 0x4D64BE: ??? 
==3682== 
==3682== Conditional jump or move depends on uninitialised value(s) 
==3682== at 0x38ACE9A505: __mktime_internal (in /lib64/libc-2.12.so) 
==3682== by 0x4D67DA: ??? 
==3682== by 0x4D7611: ??? 
==3682== by 0x4D23CD: ??? 
==3682== by 0x4D175B: ??? 
==3682== by 0x38ACE1ECDC: (below main) (in /lib64/libc-2.12.so) 
==3682== Uninitialised value was created by a stack allocation 
==3682== at 0x4D64BE: ??? 

回答

5

对于其他人谁运行到这...

的结构是由strptime,这显然并不在结构成员填补未使用(DST)充满...但mktime不喜欢这样:)所以memset它为零

+0

这是一个非常普遍的错误。如果您希望mktime确定tm_isdst的正确值,请将其设置为-1(如mktime手册页中所述)。 – 2012-01-28 17:20:50

+3

或者 - 建议[这里](http://www.ex-parrot.com/~chris/random/initialise.html) - 而不是memset'ting,用struct struct tm date来初始化零结构= {0};' – freitass 2013-05-23 16:08:03