time_t
в Linux (по крайней мере, на моем компьютере RHEL6) - это signed long
, размер которого будет 64-битным при 64-битной сборке.Вы передаете адрес uint32_t
, что означает, что gmtime
читает четыре байта мусора, вызывая неопределенное поведение.
Windows, по-видимому, по умолчанию также 64-битная time_t
, но это *У 1008 * есть возможность заставить его использовать 32-битный тип за счет возможного запуска ошибки Y2038.В любом случае, он может просто работать в Windows по совпадению (в конце концов, неопределенное поведение может включать в себя «работает как положено»).
Когда значение огромно, gmtime
может в итоге вернуть NULL
,которая вызовет ошибку, если вы попытаетесь прочитать ее.