2012-01-27 2 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 이 싫어 :) 그래서 0으로 memset 그것을

+0

이것은 매우 일반적인 버그입니다. mktime이 tm_isdst의 적절한 값을 결정하게하려면 -1로 설정하십시오 (mktime 매뉴얼 페이지에 설명되어 있음). –

+3

또는 제안 된 [here] (http://www.ex-parrot.com/~chris/random/initialise.html) -'memset'ting 대신'struct tm date를 사용하여 구조체를 0으로 초기화하십시오 = {0}; – freitass