Segmentation fault 治疗
我有一个我用来捕获的应用程序 segmentation fault 或者 ctrl-c.
使用下面的代码,我可以抓住 segmentation fault, 但是一次又一次地调用处理程序。 我怎么能阻止他们?
在你的注意事项上,我不想超出我的申请。 我只能注意到所有损坏的缓冲区。
是否有可能?
处理程序看起来像这样。
这里用于信号 Segmentation fault 处理程序称为几次,并且显然, MyfreeBuffers// 让我错误地发布已经发布的内存。 我只想释放自己一次,但仍然不想离开这个应用程序。
请帮忙。
使用下面的代码,我可以抓住 segmentation fault, 但是一次又一次地调用处理程序。 我怎么能阻止他们?
在你的注意事项上,我不想超出我的申请。 我只能注意到所有损坏的缓冲区。
是否有可能?
void SignalInit/void /
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = mysighandler;
sigemptyset/&sigIntHandler.sa_mask/;
sigIntHandler.sa_flags = 0;
sigaction/SIGINT, &sigIntHandler, NULL/;
sigaction/SIGSEGV, &sigIntHandler, NULL/;
}
处理程序看起来像这样。
void mysighandler//
{
MyfreeBuffers//; /*related to my applciation*/
}
这里用于信号 Segmentation fault 处理程序称为几次,并且显然, MyfreeBuffers// 让我错误地发布已经发布的内存。 我只想释放自己一次,但仍然不想离开这个应用程序。
请帮忙。
没有找到相关结果
已邀请:
7 个回复
小明明
赞同来自:
, 它是完成您的进程,但由于您已安装了一个处理程序,因此它将导致您的处理程序覆盖默认行为。 但问题是球队 segfaulting 完成处理程序后可以重复,如果您没有采取行动纠正第一个错误 seg, 重新命令再次出错,它将继续并继续。
因此,首先找到导致的指令
, 并试图解决它 /你可以称之为
在处理程序中,看看出了什么问题/
另外,标准 POSIX 说
在通常在通常返回之后无法确定该过程的行为
信号捕获功能 [XSI] SIGBUS, SIGFPE, SIGILL 或者
SIGSEGV, 哪个未生成 kill//, [RTS] sigqueue//,
或者 raise//.
所以,你需要做的完美事物 - 它是首先修复你的segfolte。
在线处理程序输出处理 / 脱机不旨在绕过阻止基本错误
所以最好的报价是 -
不要抓住
. 让他重置核心。 分析主要。 纠正错误的内存链接,就是这样!
小姐请别说爱
赞同来自:
"Don't catch the SIGSEGV"
.
这是一个非常好的做法
意外
情况。 这是应对的更清洁
指针 NULL /定义 malloc/ 用信令机制 , 相关的S.
, 如何在整个代码中分发错误管理。
但请注意 , 如果你使用怎么办 ''sigaction'' 在
, 你不必忘记说话
在
- 或者找到另一种方法来应对这个事实
只拨打一次处理器一次。
</string.h></stdio.h></signal.h></setjmp.h>
冰洋
赞同来自:
它再次工作,明显的结论是挑战
不是
消除了主要问题 /如果这个功能真的只做了
一些孤立的记忆,我不确定你为什么这么认为/.
粗略地讲, a
尝试访问无法访问的内存地址时触发。 如果您不会留下应用程序,则需要进行此内存地址可用,或更改执行路径
.
龙天
赞同来自:
. 这基本上意味着您的应用环境是不知何故损坏的。 也许你只是上升了指针 null, 或者可能某种错误导致您的程序损坏了堆栈,一堆或一些可变指针,您只是不知道。 你唯一能做的事情
安全, - 这已完成。
完全合法地处理控制。 许多应用程序都这样做了,但您应该非常小心,您在信号处理程序中究竟在做什么。 您无法调用任何未再投资的功能。 因此,这意味着如果你的
导致功能 stdlib
, 你可能需要。 如果用户点击 control-C, 当程序在中间
或者
因此,中途操纵他们用来跟踪堆的分布的数据结构,如果你打电话,你几乎肯定会破坏一堆群
或者
在信号处理程序中。
您在信号处理程序中可以做的唯一安全的东西 - 这是为了设置旗帜,可以说你抓住了信号。 然后,您的应用程序可以定期询问标志以决定它是否需要执行一些操作。
江南孤鹜
赞同来自:
君笑尘
赞同来自:
二哥
赞同来自:
看着
https://coderoad.ru/9225415/
例如。