这是我的信号处理程序:
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;),但第二次我遇到段错误,我的程序崩溃并抱怨段错误。为什么第一次正确处理它而不是第二次处理?