在c ++中发生堆栈溢出时获取SIGSEGV

时间:2010-11-24 15:04:48

标签: c++ segmentation-fault

所以我最近制作了一个处理SIGSEGV信号的代码,例如在尝试使用单位指针时。但是,由于某种原因,堆栈溢出(由valgrind指示)无法调用SIGSEGV信号处理程序。

这是标准行为,还是只是GCC的怪癖?

此外,由于我一直在使用backtrace()功能来弄清楚出了什么问题,所以假设这是不可访问的是正确的,因为堆栈溢出意味着无法获得堆栈跟踪(例如堆栈太大而无法打印等)?

谷歌有关此信息实际上非常难,因为与“堆栈溢出”相关的任何内容都会发送到此站点。

2 个答案:

答案 0 :(得分:2)

讽刺的是,没有堆栈溢出或C ++中的信号。因此,您看到的这种行为是特定于平台的某种未定义行为的表现形式。

答案 1 :(得分:0)

当堆栈溢出时,除了系统调用之外调用任何东西都是不可能的,因为函数调用会给溢出的堆栈增加更多。