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

10-12 00:12