c ++ / gcc:捕获信号后主要出口处的分段故障

时间:2010-08-11 16:23:17

标签: c++ segmentation-fault

以下代码在退出时触发分段错误。 似乎只有在'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

运行并停止

- &GT;线'int i'开启:分段错误

- &GT;没有'int i'行:退出确定

(用g ++ v4.1.1编译,OS linux内核2.6.19)

听起来像堆栈发布问题......任何人都有解释?

谢谢,

1 个答案:

答案 0 :(得分:3)

你应该初始化你的struct sigaction的所有成员,因为不存在包含垃圾的风险,有标志/等。在那里改变sigaction的行为() 做

struct sigaction args = {}; 

memset(&args,0,sizeof args);