【发布时间】:2023-03-29 14:00:01
【问题描述】:
知道为什么信号处理程序会进入无限循环吗?
这里是代码。 请帮帮我。
enter code here
9 void SIGSEGV_handler(int signal)
10 {
11 printf("Segmentation fault caught....\n");
12 printf("Value of instance variable: i = %d\n\n", i);
13 }
16
17 int main()
18 {
19 char *mallocPtr, *callocPtr, *reallocPtr, *memalignPtr, *vallocPtr;
20 struct sigaction sa;
21
22 sa.sa_handler=SIGSEGV_handler;
23 sigaction(SIGSEGV, &sa, NULL);
24
37
38 printf("The segmentation fault handler will be entered for i = 3, 4, 5 and 6\n");
39
40
41 for(i=0; i<7; i++)
42 {
43 printf("i = %d\n",i);
44
45 mallocPtr=(char*)malloc(3);
46 printf("Malloc address : %x\n",mallocPtr);
47 strcpy(mallocPtr, "Hhvhgvghsvxhvshxv");
48 puts(mallocPtr);
【问题讨论】:
-
只有我一个人,还是你没有发布整个
for循环?也许更进一步,你正在对i做一些事情,我相信你已经在全球范围内宣布了它,仅此一项就是一件坏事 -
您无法在信号处理程序中可靠地调用 printf。您不能可靠地从 SIGSEGV 的处理程序返回(您应该退出)。
-
不,我不能退出..因为在我的情况下,我需要捕捉它要处理的时间间隔(可能是 3 到 6 秒)。
-
@SS 'Kain':代码的另一部分与问题无关。