2

我正在使用sigaction()函数注册 SIGSEGV(用于分段错误)。它适用于所有情况,但除了一种情况,即堆栈溢出时。我搜索以解决此问题。然后我得到答案,我们必须分配备用堆栈。但我不知道如何为信号注册分配交替堆栈。请帮助我逐步为分段故障分配备用堆栈。

4

2 回答 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 回答