当前位置:  开发笔记 > 编程语言 > 正文

为什么未处理的异常会导致分段错误?

如何解决《为什么未处理的异常会导致分段错误?》经验,为你挑选了1个好方法。

这是一个最小的例子:

[joel@maison various] (master *)$ cat throw.cpp 

#include 


int main(int argc, char* argv[])
{
  throw("pouet pouet");
}

[joel@maison various] (master *)$ ./a.out 
terminate called after throwing an instance of 'char const*'
Aborted (core dumped)

阅读文档,似乎是默认的终止处理程序abort().我在中止手册页中找不到任何关于触发段错误的信息.



1> Marco A...:

抛出异常并且不处理它abort()会引发异常SIGABRT.

您可以使用以下内容进行验证

#include 
#include 
#include 

extern "C" void handle_sigabrt(int)
{
    std::cout << "Handling and then returning (exiting)" << std::endl;
}

int main()
{
  signal(SIGABRT, &handle_sigabrt);

  throw("pouet pouet");
}

Demo


即使使用`std :: endl`强制执行stdout刷新,该消息也是特定于实现的.程序员返回后程序将立即终止.一种极其愚蠢的方式(因此非常气馁)避免这种情况并没有回归(http://melpon.org/wandbox/permlink/pzntUUEAEqHU1eGz).另一种方法可能是使用堆栈蹦床,如boost :: coroutine2(https://isocpp.org/blog/2016/11/coroutines-internals)中所述.使用这些技术需要极其谨慎**至少可以说,如果要在生产软件中部署.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有