gettimeofday()不填充其timeval参数

时间:2019-05-26 02:33:00

标签: c macos time

我正在测试是否可以使用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 个答案:

答案 0 :(得分:4)

您正在将未初始化的指针传递给该函数。结果可能是任何东西,这是未定义的行为。

要从gettimeofday获得结果,您需要将有效的指针传递到该函数将要填充的缓冲区。该函数不提供该缓冲区(即使它想提供,也不能提供),因为指针参数是通过值传递的。)