C 信号处理程序仅处理segfault的第一个实例

C 信号处理程序仅处理segfault的第一个实例,c,C,这是我的信号处理器: void sig_segv_handler(int sig) { printf("This is the signal handler for SIGSEGV\n"); (void) signal(SIGSEGV, SIG_IGN); siglongjmp(env, 1); } My main()函数: int main() { (void) signal(SIGSEGV, sig_segv_handler); char * patt

这是我的信号处理器:

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

  (void) signal(SIGSEGV, SIG_IGN);

  siglongjmp(env, 1);   

}
My 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;

}
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);
  }
}
以及我的findpattern()函数:

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;

}
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);
  }
}
unsigned int findpattern(unsigned char*模式、unsigned int patlength、struct patmatch*位置、unsigned int loclength){

对于(i=0;i,因为您使用
signal(SIGSEGV,SIG_IGN)删除处理程序;
您只是想调试您的程序吗?如果是这样,在
gdb
下运行可能更容易。要修复segfault的原因:
temp=(char*)i;
-->
temp=(char*)&i
。但是……这仍然没有多大用处,因为即使是固定的构造也没有多大用处,除非将
i
定义为
chari
(也就是说,它可能在little endian机器上工作,但充其量只是一个黑客)。而且,将二进制文件输出到终端也不是一件好事。为什么不发布整个代码,因为没有更多上下文,很难提出更好的建议。谢谢Barmar-这就解决了问题:D