最后用于分段错误的块(C ++)

时间:2010-11-13 00:58:45

标签: c++ exception-handling segmentation-fault ncurses

我正在使用ncurses,每当我遇到段错误时,ncurses都没有正确释放对终端的控制权(因为从未调用过endwin())。我设置了一个信号处理程序:

void handler(int signum) {
    endwin();
    exit(EXIT_FAILURE);
}

但问题是segfault被忽略,而不是延迟到endwin()之后。我是C ++的新手;可以像异常那样捕获段错误,这样我就可以拥有一个finally块吗?或者是否有人从处理程序内部重新发送段错误?

2 个答案:

答案 0 :(得分:4)

Segfault是未定义的行为。你必须找到并修复它。不要担心ncurses不发布终端,找到并修复bug。

答案 1 :(得分:0)

来自signal手册页:

  

根据POSIX,在忽略SIGFPE,SIGILL之后,进程的行为是未定义的,          或者不是由kill(2)或raise(3)生成的SIGSEGV信号。

在seg故障之后尝试做任何事情都是疯狂的。这就像你在碰撞后激活的安全气囊,你继续驾驶,因为,你有一个安全气囊,它会让你在碰撞中保持安全。用处理程序来解决这个问题并非如此。

一种方法是让程序从文件中获取输入或输出输出。您也可以尝试remotely attaching to a process with gdb。从来没有这样做但是值得一试。

相关问题