【发布时间】:2014-03-29 22:15:42
【问题描述】:
我正在处理一个涉及链表的 C 项目,我需要对一段代码进行分段以证明它不起作用。但我的代码不会崩溃。
到目前为止,这是我的处理程序:
typedef void sigfunc(int);
sigfunc *signal(int, sigfunc*);
void Handler(int sig)
{
if (sig == SIGSEGV)
printf("received SegFault\n");
signal(SIGSEGV, &Handler);
}
它需要在段错误中幸存下来。到目前为止,我得到的只是“收到 SegFault”的无限循环。提前致谢!
【问题讨论】:
-
在信号处理程序中调用
printf()是不安全的。 stackoverflow.com/questions/8493095/… -
对于您的特定用例,您最好检查每个指针的有效性(这可能需要确保所有无效指针都为空),并在段错误发生之前检测它。
-
这个问题似乎在积累反对票......我不同意这是一个特别糟糕的问题;唯一的主要问题是正确的答案是“你不能”(不能指望提问者提前知道)。
-
问题是“炸弹爆炸了;我的建筑物现在结构不稳定,即将倒塌。结构中可能有任意更多的炸弹,任何动作都可能触发。我如何忽略这一切并继续在那里正常生活吗?”你没有;你会尽快摆脱这种情况。进程正在下降;让它下去吧。
标签: c segmentation-fault signal-handling