以下代码在退出时触发分段错误。 似乎只有在'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)
听起来像堆栈发布问题......任何人都有解释?
谢谢,
答案 0 :(得分:3)
你应该初始化你的struct sigaction的所有成员,因为不存在包含垃圾的风险,有标志/等。在那里改变sigaction的行为() 做
struct sigaction args = {};
或
memset(&args,0,sizeof args);