我能够处理一次段错误。但是当它再次发生时会导致段错误。是否可以多次处理 sigsegv 信号?
#define _POSIX_SOURCE
#include <signal.h>
#include <stdio.h>
int *a;
class FoobarException
{
int thingy;
};
void signal_handler(int signum, siginfo_t *info, void *)
{
printf("signal_handler\n");
FoobarException *f = new FoobarException;
throw f;
}
void call(int * c)
{
struct sigaction act;
act.sa_sigaction = signal_handler;
sigemptyset (&act.sa_mask);
act.sa_flags = SA_SIGINFO;
sigaction (11, &act, NULL);
try
{
printf("%d\n", *a);
}
catch (FoobarException *f)
{
printf("Hello!\n");
}
}
int main()
{
int *b;
call(b);
printf("I am here.\n");
call(a);
}
第一个 call(b)
处理段错误,但第二个 call(a)
引发段错误。
最佳答案
一旦您遇到段错误,并且您处理了异常,但您没有恢复原因。打赌是为了避免段错误。在你的示例程序中,你有指针,a
,b
但没有分配,所以,a
,b
包含垃圾(未分配),因此访问 *a
是有风险的,会导致段错误。
相反,为a
、b
分配足够的空间,例如,
a = (int *) malloc(sizeof (int));
同样,对于b
。
不要忘记在完成后释放,比如,
free(a);
关于c++ - 在 C++ 中多次处理段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25887200/