我正在使用sigaction()
函数注册 SIGSEGV(用于分段错误)。它适用于所有情况,但除了一种情况,即堆栈溢出时。我搜索以解决此问题。然后我得到答案,我们必须分配备用堆栈。但我不知道如何为信号注册分配交替堆栈。请帮助我逐步为分段故障分配备用堆栈。
问问题
133 次
2 回答
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
.
于 2013-10-02T18:39:16.720 回答
-1
首先用sigaltstack ()建立一个替代栈
其次,在安装信号处理程序时,使用sigactionsa_flags
(),并在struct sigaction的成员中设置SA_ONSTACK 。
于 2013-10-02T18:38:49.073 回答