信号处理程序仅处理段错误的第一个实例

时间:2017-02-02 01:48:19

标签: c

这是我的信号处理程序:

void sig_segv_handler(int sig) 
{
  printf("This is the signal handler for SIGSEGV\n");

  (void) signal(SIGSEGV, SIG_IGN);

  siglongjmp(env, 1);   

}

我的main()函数:

int main() {

  (void) signal(SIGSEGV, sig_segv_handler);

  char * pattern = "a";
  unsigned int patlength = 1;
  struct patmatch *locations;
  unsigned int loclength = 5;

  findpattern(pattern, patlength, locations, loclength);

  return 0;

}

我的findpattern()函数:

unsigned int findpattern(unsigned char *pattern, unsigned int patlength, struct patmatch *locations, unsigned int loclength) {
     for (i=0; i<max; i++) {

     j = sigsetjmp(env, 1);

     temp = (char *) i;

   printf("temp = %c\n", *temp);
  }
}

通过使用printf()调用进行大量测试,我知道程序在printf上崩溃了(&#34; temp =%c \ n&#34;,* temp);.第一次发生这种情况时,我的信号处理程序被调用并正常运行(打印出#34;这是信号处理程序&#34;),但第二次我遇到段错误,我的程序崩溃并抱怨段错误。为什么第一次正确处理它而不是第二次处理?

0 个答案:

没有答案