当前位置:  技术问答>linux和unix

gettimeofday()为什么会出现段错误

    来源: 互联网  发布时间:2017-02-08

    本文导语:  我两个程序,同样的程序流程,只不过一个是结构体变量,一个是结构体指针,但是为什么结构体指针运行完之后报错,说段错误。 正确的程序是这个: #gettimeofday_r.c #include  #include  #include  void foo() {       ...

我两个程序,同样的程序流程,只不过一个是结构体变量,一个是结构体指针,但是为什么结构体指针运行完之后报错,说段错误。

正确的程序是这个:
#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);

|
函数需要一个指针,而你给了它一个未初始化的指针,程序没崩溃就算运气好了。
第一种才是标准用法,第二种需要这样:

struct timeval start;
struct timeval *pstart = &start;
gettimeofday(...);

|
看一下函数声明就知道了,第一个参数必须是指针。
int gettimeofday(struct timeval *tv, struct timezone *tz);

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • 请教:gettimeofday遇到问题
  • 关于gettimeofday() 函数的奇怪问题
  • gettimeofday函数奇特的时光倒转现象
  • gettimeofday 系统调用能精确到多少?
  • 我用gettimeofday()函数,取得的时区是不是/etc/localtime所设的时区?
  • gettimeofday 获取当前时间,是怎么计算间隔的 。
  • 急~ 用time()或gettimeofday()得到的系统时间不同步?
  • 关于gettimeofday差4398秒的问题?
  • 为什么我在Linux使用gettimeofday会报未定义的错???
  • Linux定时器问题,使用ITIMER_REAL实现系统调用gettimeofday()所实现的功能时出错,请教各位!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3