我正在测试是否可以使用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),我不希望打印任何内容,但输出如下:
tp_end: Strange...

我试过很多次,但结果总是一样的。怎么回事?

最佳答案

您正在向函数传递未初始化的指针。结果可能是任何事情,这是未定义的行为。
要从gettimeofday中获取结果,需要将有效指针传递给函数将填充的缓冲区。函数不提供缓冲区(即使它想提供也不能,因为指针参数是按值传递的)。

关于c - gettimeofday()不填充其timeval参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56310197/

10-10 23:19