c - C 中的多个信号会导致段错误吗?

标签 c segmentation-fault signals

运行我的代码时,它崩溃并显示“段错误”。

但是,当我在 gdb 中运行它时,它由于 SIGABRT 错误而不是 SIGSEGV 而崩溃。

是否还有其他信号也“映射”到终端上的一般段错误?

最佳答案

abort() 向调用进程发送 SIGABRT 信号,这就是 SIGABRT 或信号 6 的生成方式。此外,大多数“断言”实现都会在断言失败的情况下使用 SIGABRT。

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

SIGSEGV 或信号 11,正式名称为“段错误”,意味着程序访问了未分配的内存位置。这通常是程序中的错误。因此,如果您正在编写自己的程序,这就是最有可能的原因。否则我没有看到任何其他信号会在程序中创建段错误。

关于c - C 中的多个信号会导致段错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28377226/

相关文章:

c - 读取 '\n' 后 fgets 意外行为

c - "."真的是 _wfopen_s/_wfindfirst 允许的通配符吗?

c++ - 为什么 signalhandler 不输出任何东西?

swift - Xcode 8.2 Swift 编译器错误 : "Segmentation Fault: 11"

c - 主/从设备出现段错误

c++ - Linux 中使用 sigaction (C++) 的信号处理程序

python - 从控制台(Ctrl-C)终止时让我的 PyQt 应用程序退出的正确方法是什么?

c - 为什么我的代码没有返回我期望的和预先计算的校验和?

c - 如何在 C 中解析 HTTP 响应?

c - 接收 SIGSEGV 的程序可能是针对 0xffffffff 的指针