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