进程在 C++ 中获得 SIGABRT 的场景有哪些?这个信号是否总是来自进程内部,或者这个信号可以从一个进程发送到另一个进程?
有没有办法确定哪个进程正在发送这个信号?
原文由 Shree 发布,翻译遵循 CC BY-SA 4.0 许可协议
进程在 C++ 中获得 SIGABRT 的场景有哪些?这个信号是否总是来自进程内部,或者这个信号可以从一个进程发送到另一个进程?
有没有办法确定哪个进程正在发送这个信号?
原文由 Shree 发布,翻译遵循 CC BY-SA 4.0 许可协议
错误 munmap_chunk invalid pointer
也会导致 SIGABRT
在我的情况下它很难调试,因为我根本没有使用指针。原来是和 std::sort()
有关。
std::sort()
需要一个创建严格弱排序的比较函数!这意味着 comparator(a, b)
和 comparator(b, a)
必须返回 false
当 a==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 许可协议
3 回答1.1k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
4 回答800 阅读
1 回答877 阅读
1 回答905 阅读
1 回答675 阅读
1 回答782 阅读
abort()
向调用进程发送SIGABRT
信号,这就是abort()
的基本工作原理。abort()
通常由检测内部错误或某些严重破坏的约束的库函数调用。例如malloc()
将调用abort()
如果其内部结构被堆溢出损坏。