+ -
当前位置:首页 → 问答吧 → 程序运行出现段错误!

程序运行出现段错误!

时间:2010-06-25

来源:互联网

  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<stdlib.h>
  4. #include<signal.h>
  5. #include<setjmp.h>
  6. jmp_buf env;
  7. void sig_handler(int signo)
  8. {
  9.         if(signo==SIGALRM)
  10.         {
  11.                 printf("the progress wake up!\n");
  12.                 longjmp(env,1);
  13.         }
  14. }
  15. int main()
  16. {
  17.         int i;
  18.         if(signal(SIGALRM,sig_handler)==SIG_ERR)
  19.         {
  20.                 printf("signal error");
  21.                 exit(0);
  22.         }
  23.         printf("check signal progress......\n");
  24.         alarm(6);
  25.         system("ls -al > myhost.txt");
  26.         system("cat myhost.txt");
  27.         printf("\n");
  28.         sleep(2);
  29.         printf("enter into sleep at once!\n");
  30.         sleep(10);
  31.         printf("sleep time is over!\n");
  32.         setjmp(env);
  33.         for(i=0;i<3;i++)
  34.         printf("welcome back\n");
  35.         return(0);
  36. }
复制代码
结果:程序运行到:the progress wake up后出现段错误了 怎么回事啊?

作者: shaohui973   发布时间: 2010-06-25

  1. 24.            alarm(6);
复制代码
  1. 32.            setjmp(env);
复制代码
调用alarm6秒后,发送SIGALRM信号.
这时候会运行你的信号处理函数,并调用longjmp函数。
但是在这之前,setjmp并没有被调用过,所以env变量没有初始化(或者说有效的设置)。
所以你的longjmp报了SIGSEGV

作者: star1983653   发布时间: 2010-06-25

楼上正解!

作者: tiwowo   发布时间: 2010-06-25

2楼正解

作者: RobinKQin   发布时间: 2010-06-25