2012-01-27 8 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, который, по-видимому, не заполнить STRUCT членов, которые не используются (ДСТ) ... но указываете ей это не нравится :) так memset это к нулю

+0

Это очень распространенная ошибка. Если вы хотите, чтобы mktime определяло правильное значение tm_isdst, установите его равным -1 (как описано в man-странице mktime). –

+3

Или - как предложено [здесь] (http://www.ex-parrot.com/~chris/random/initialise.html) - вместо 'memset'ting, инициализировать структуру с помощью нулей, используя' struct tm date = {0}; ' – freitass