以下代码在退出时触发分段错误。
似乎只有在'sigaction'调用和循环之间的堆栈上分配了数据时,才会发生这种情况:
#include <signal.h>
#include <unistd.h>
bool end = false;
void handler(int) {
end = true;
}
int main() {
struct sigaction sigs;
sigs.sa_handler = handler;
sigaction(SIGINT, &sigs, NULL);
int i;
while (!end)
sleep(1);
return 0;
}
使用ctrl-C运行和停止
->在行'int i'上:分段错误
->不带'int i'行:退出确定
(与g++ v4.1.1,OS linux内核2.6.19编译)
听起来像是堆栈释放问题...有人在解释吗?
谢谢,
最佳答案
您应该初始化struct sigaction的所有成员,以免冒其包含垃圾的危险,这里有flags / etc。在那改变sigaction()的行为
做
struct sigaction args = {};
要么
memset(&args,0,sizeof args);
关于c++ - c + +/gcc:捕获信号后,main导出出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3460559/