signal信号问题
本帖最后由 qpwoeiruyt 于 2019-11-20 09:38 编辑大佬们 帮我修改下代码 让我触发SIGSEGV
比如说 我这个代码 一开始 输入n=5 他能做一个t 的表格然后再输入一个数字 i 他能显示t
但如果我们输入i=10 查看t 不就是 Segment fault 然后触发信号SIGSEGV然后siglongjmp 让我们再输入一次这样子
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
#include<setjmp.h>
#include<time.h>
jmp_buf buf;
void segfault(){
siglongjmp(buf,1);
}
int main(){
int* tab;
struct sigaction action;
action.sa_handler=segfault;
action.sa_flags=0;
sigaction(SIGSEGV,&action,NULL);
int i,n,val;
printf("输入长度 n: ");
scanf("%d",&n);
tab=(int*)malloc(n*sizeof(int));
srand(time(NULL));
for(i=0;i<n;i++){
tab=rand();
printf("[%d]%d\n",i,tab);
}
while(1)
{
if (sigsetjmp(buf,1)!=0)
{
printf("\njump to here! ");
}
printf("\n\n输入想查看的位置: ");
scanf("%d",&val);
printf("tab[%d]=%d\n",val,tab);
}
free(tab);
return(0);
}
±± ???
页:
[1]