gettimeofday () не заполняет свой временной аргумент - PullRequest
0 голосов
/ 26 мая 2019

Я тестирую, смогу ли я использовать gettimeofday() для измерения производительности фрагмента кода.

#include <unistd.h>
#include <stdio.h>
#include <sys/time.h>

int main() {
  struct timeval *tp_begin;
  gettimeofday(tp_begin, NULL);
  if (tp_begin == NULL) printf("tp_begin: Strange...\n");

  struct timeval *tp_end;
  gettimeofday(tp_end, NULL);
  if (tp_end == NULL) printf("tp_end: Strange...\n");

  return 0;
}

Этот код компилируется (с gcc -g test.c -o test), и я ожидаю, что ничего не будет напечатано stdout, но вот вывод:

tp_end: Strange...

Я пытался запустить это несколько раз, но результат всегда один и тот же. Что здесь происходит?

1 Ответ

4 голосов
/ 26 мая 2019

Вы передаете неинициализированный указатель на функцию.Результатом может быть что угодно, это неопределенное поведение.

Чтобы получить результат от gettimeofday, вам необходимо передать действительный указатель на буфер, который будет заполнять функция. Функция не выполняетпредоставить буфер (он не мог, даже если бы захотел, потому что аргумент-указатель передается по значению).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...