2012-01-27 16 views
3

初めて(新しい開発環境で)私はvalgrindがmktimeについて不平を言っているのを見ていますが、これがlibcライブラリ、valgrind、または私のコードのバグかどうかはわかりません。私はエラー(下記)から始めます - 原因を説明するのに十分な情報ですか?__mktimeについて不平を言っているvalgrind - それは私のせいですか?

このに走る他の誰のために
==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

...

構造体が明らかに(DST)に使用されていない構造体のメンバに記入していないのstrptime、で満ちていた...しかし、関数mktimeこれは好きではありません:) memset to zero

+0

これは非常に一般的なバグです。 mktimeでtm_isdstの適切な値を判断するには、-1に設定します(mktimeのマニュアルページに記載されています)。 –

+3

または - ここで提案されているように(http://www.ex-parrot.com/~chris/random/initialise.html)、 'memset'tingの代わりに' struct tm dateを使用して構造体をゼロで初期化します= {0}; ' – freitass