进程何时获得 SIGABRT(信号 6)?

新手上路,请多包涵

进程在 C++ 中获得 SIGABRT 的场景有哪些?这个信号是否总是来自进程内部,或者这个信号可以从一个进程发送到另一个进程?

有没有办法确定哪个进程正在发送这个信号?

原文由 Shree 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 830
2 个回答

abort() 向调用进程发送 SIGABRT 信号,这就是 abort() 的基本工作原理。

abort() 通常由检测内部错误或某些严重破坏的约束的库函数调用。例如 malloc() 将调用 abort() 如果其内部结构被堆溢出损坏。

原文由 Nordic Mainframe 发布,翻译遵循 CC BY-SA 3.0 许可协议

错误 munmap_chunk invalid pointer 也会导致 SIGABRT 在我的情况下它很难调试,因为我根本没有使用指针。原来是和 std::sort() 有关。

std::sort() 需要一个创建严格弱排序的比较函数!这意味着 comparator(a, b)comparator(b, a) 必须返回 falsea==b 成立时。 (请参阅 https://en.cppreference.com/w/cpp/named_req/Compare )在我的情况下,我在我的结构中定义了 operator< ,如下所示:

 bool operator<(const MyStruct& o) const {
    return value <= o.value; // Note the equality sign
}

这导致了 SIGABRT 因为该函数不会创建严格的弱排序。删除 = 解决了问题。

原文由 Berkay Berabi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题