如果set_terminate中的处理程序不会流产,会发生什么
What happens if the handler in set_terminate does not abort?
如果用set_terninate指示的处理程序本身不调用abort((?
,程序的行为是什么?如果我很好地理解,std :: terminate(((在标题异常(被调用,例如,当未捕获异常时。我读(也在这里(,默认情况下将std :: terminate((定义为呼叫std :: abort((,但可以使用set_terninate(handler(进行修改。如果新处理程序不调用Abort((怎么办?默认情况下是否添加?
我在下面说明了我不理解的行为。短信后,终止((的新处理程序可以中止或呼叫终止或退出。如果未设置这些选项,则程序以异常终止结束。但是,如果插入Abort((,也会发生同样的事情。如果我们使用exit((,则程序以成功结束,并且在出口(..(中编写的错误代码结束。如果我们调用terminate((,我们将获得无尽的循环(运行失败,代码127(。
这是Windows 8.1计算机上的MingW 6.3.0,带Netbeans。
void myOwnOnExit() {
cerr << "called myOwnOnExitn";
}
void myOwnTerminate() {
cerr << "called myOwnTerminaten";
// Uncomment one of the following:
// // if none is uncommented, abnormal termination, error 3
// abort(); // with or without it, abnormal termination, error 3
// terminate(); // get an infinite loop, error code 127 in 3 seconds
// exit(EXIT_SUCCESS); // displays "called myOwnOnExit", success
}
int main() {
atexit(myOwnOnExit);
set_terminate(myOwnTerminate);
throw 1;
cerr << "we should not see this"; // and we don't
}
非常感谢您的提示或建议。
您应该在 terminate_handler
中终止程序,这是标准要求的:
[terminate.handler]
必需的行为:终止_handler应终止程序执行,而无需返回呼叫者。
因此,如果您的处理程序无法满足要求,那是不确定的行为。
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- C++std::atomic在程序员级别保证了什么
- 我正在尝试制作一个程序,在添加 n 天(整数)后告诉一个人什么是一天(例如星期一等)
- 什么是"undetectable means",它们如何更改 C/C++ 程序的对象?
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我的堆栈和库存清单程序的结构有什么问题?
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 没有信号处理程序的POSIX定时器的目的是什么?
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 指针和程序性能之间有什么关系吗?
- 我的C++级数计算程序出了什么问题?被困了好几个星期
- 是什么原因导致我的SDL2程序中出现杂散像素
- 我的C++程序的工作目录是什么
- 程序什么时候会创建多个堆
- 我可以编写什么程序来冻结/挂起我的程序来测试看门狗计时器
- Windows如何知道用什么程序打开文件?