Почему gettimeofday возвращает странный tv_sec?

У меня есть приложение, которое вызывает gettimeofday хранить tv_sec, в котором эта часть кода начинает выполняться. Этот код очень прост:

struct timeval tvnow;
gettimeofday(&tvnow);
int initialTime = tvnow.tv_sec;

Обычно это работает нормально, но иногда я получаю неожиданные результаты, такие как

tvnow = {tv_sec = 1024, tv_usec = 0}
initialTime = 1401591

Или же

tvnow = {tv_sec = 1024, tv_usec = 0}
initialTime = 2439903

Почему это могло случиться?

С уважением

1 ответ

Решение

Ты звонишь gettimeofday() с неправильным количеством аргументов. Результирующее поведение не определено. Если вам не нужна информация о часовом поясе, тогда передайте NULL в качестве второго аргумента:

struct timeval tvnow;
gettimeofday(&tvnow, NULL);
int initialTime = tvnow.tv_sec;

Я собираюсь предположить, что каким-то образом вы включаете комбинацию заголовков, которые включают определение struct timeval (или вы предоставляете свое собственное определение), но не прототип для gettimeofday(), Если в точке вызова функции был виден правильный прототип, то код вообще не должен компилироваться. Если ваш компилятор не выдает предупреждение об отсутствии прототипа, вам следует либо выяснить, как заставить его это сделать (и всегда так компилировать), либо получить лучший компилятор.

Другие вопросы по тегам