我正在测试是否可以使用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...
我已尝试多次运行此命令,但结果始终相同。这是怎么回事?
答案 0 :(得分:4)
您正在将未初始化的指针传递给该函数。结果可能是任何东西,这是未定义的行为。
要从gettimeofday
获得结果,您需要将有效的指针传递到该函数将要填充的缓冲区。该函数不提供该缓冲区(即使它想提供,也不能提供),因为指针参数是通过值传递的。)