gpt4 book ai didi

c - 是 sigsegv 的模棱两可的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:31 26 4
gpt4 key购买 nike

注意:当我像 raise(SIGSEGV); 那样引发 SIGSEGV 时,SEGSEGV 会被阻止,但在取消引用 NULL 指针或内存冲突时不会。这里有什么问题?

代码:

void sig_handler(int signo)
{
psignal(signo,"i am in sig_handler\n");
}

int main()
{
sigset_t intmask;
int c = 0, *p = NULL;

if((signal(SIGSEGV , sig_handler)) == SIG_ERR)
perror("signal call is failed\n");
if ((sigemptyset(&intmask) == -1) || (sigaddset(&intmask, SIGSEGV) == -1))
perror("Failed to initialize the signal mask");
sigprocmask(SIG_BLOCK, &intmask, NULL);
fprintf(stdout, "SIGINT signal blocked\n");
c = *p;
}

最佳答案

sigprocmask() 的手册页有答案:

If SIGBUS, SIGFPE, SIGILL, or SIGSEGV are generated while they are blocked, the result is undefined, unless the signal was generated by kill(2), sigqueue(3), or raise(3).

关于c - 是 sigsegv 的模棱两可的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com