我正在使用sigaction()
函数注册SIGSEGV(用于分段错误)。它适用于所有情况,但除了一种情况,即当堆栈溢出时。我搜索解决了这个问题。然后我得到答案,我们必须分配备用堆栈。但我不知道如何为信号注册分配altrenate堆栈。请帮我逐步为segmenaion故障分配备用堆栈。
答案 0 :(得分:2)
您可以使用sigaltstack
。
stack_t stack = {
.ss_sp = malloc(SIGSTKSZ),
.ss_size = SIGSTKSZ,
.ss_flags = 0
};
if (sigaltstack(&stack, NULL))
perror("sigaltstack");
此时只需使用sigaction
建立信号处理程序并使用sa_flags = SA_ONSTACK
。
答案 1 :(得分:-1)
首先使用sigaltstack()
建立一个替代堆栈其次,在安装信号处理程序时,使用sigaction()并在struct sigaction的sa_flags
成员中设置SA_ONSTACK。