【问题标题】:Do multiple signals in C result in a segmentation fault?C语言中的多个信号会导致分段错误吗?
【发布时间】:2015-02-07 00:47:37
【问题描述】:

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

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

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

【问题讨论】:

  • 调试环境可能与非调试环境略有不同,因此bug(可能是未初始化的指针)以不同的方式表现出来,导致不同的崩溃。但您问题的直接答案是“只有 SIGSEGV 会导致分段错误”。

标签: c segmentation-fault signals


【解决方案1】:

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

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

SIGSEGV 或 Signal 11,正式称为“分段错误”,表示程序访问了未分配的内存位置。这通常是程序中的错误。因此,如果您正在编写自己的程序,那是最可能的原因。否则我看不到任何其他信号会在程序中造成分段错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2021-05-12
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多