当前位置: 技术问答>linux和unix
gettimeofday()为什么会出现段错误
来源: 互联网 发布时间:2017-02-08
本文导语: 我两个程序,同样的程序流程,只不过一个是结构体变量,一个是结构体指针,但是为什么结构体指针运行完之后报错,说段错误。 正确的程序是这个: #gettimeofday_r.c #include #include #include void foo() { ...
我两个程序,同样的程序流程,只不过一个是结构体变量,一个是结构体指针,但是为什么结构体指针运行完之后报错,说段错误。
正确的程序是这个:
#gettimeofday_r.c
运行结果是:
错误的代码我用gdb调试,最后的程序到最后一个括号结束了,然后提示:
Cannot find bounds of current function
Program received signal SIGSEGV,segmentation fault
正确的程序是这个:
#gettimeofday_r.c
#include
#include
#include
void foo()
{
int i = 0;
for (; i tv_usec);
foo();
gettimeofday(end, NULL);
printf("end time is %d:%dn", end->tv_sec, end->tv_usec);
timeuse = 1000000 * (end->tv_sec - start->tv_sec) + ( end->tv_usec - start->tv_usec );
printf("timeuse1 is %f n", timeuse);
timeuse /= 1000000;
printf("timeuse2 is %f n", timeuse);
printf("use time is %fn", timeuse);
return 0;
}
运行结果是:
start time is 1331190767:111354
end time is 1331190767:111558
timeuse1 is 204.000000
timeuse2 is 0.000204
use time is 0.000204
Segmentation fault
错误的代码我用gdb调试,最后的程序到最后一个括号结束了,然后提示:
Cannot find bounds of current function
Program received signal SIGSEGV,segmentation fault
|
你没有给指针分配空间啊
start=(struct timeval *)malloc(struct timeval);
gettimeofday(start, NULL);
start=(struct timeval *)malloc(struct timeval);
gettimeofday(start, NULL);
|
函数需要一个指针,而你给了它一个未初始化的指针,程序没崩溃就算运气好了。
第一种才是标准用法,第二种需要这样:
struct timeval start;
struct timeval *pstart = &start;
gettimeofday(...);
第一种才是标准用法,第二种需要这样:
struct timeval start;
struct timeval *pstart = &start;
gettimeofday(...);
|
看一下函数声明就知道了,第一个参数必须是指针。
int gettimeofday(struct timeval *tv, struct timezone *tz);
int gettimeofday(struct timeval *tv, struct timezone *tz);
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。