陷阱、错误、失败和程序流产之间有什么区别

What is the difference between a trap, an error, a failure and program abortion?

本文关键字:之间 区别 什么 程序 错误 失败 陷阱      更新时间:2023-10-16

我经常在C++面试问题中看到以下术语:

  • 程序中止
  • 错误
  • 故障
  • 存水弯

我不太清楚这些术语之间的区别。有人能提供一个清晰简洁的解释吗?

编辑:上下文问题是:"删除指针两次会发生什么?"但对我来说,了解这些术语之间的差异比答案更重要。

这些对C++来说并不是特别的。

  • 中止是指由于出现问题而终止程序或特定操作。有一个从C库继承的C++库函数std::abort,它像通过外部信号一样杀死程序,并且不运行析构函数或清理。

  • 错误是指出了问题。在C++中,许多类型的错误不一定会立即被检测到。C++反而指定了未定义的行为,这可能涉及安静内存损坏,稍后可能会导致神秘的不当行为。

  • 失败是指程序做了错误的事情。这是一个相当通用的工程术语。头发尖尖的老板可能比其他人更熟悉这个概念,因为这是客户唯一真正知道的概念。

  • 陷阱是指程序检测到错误情况并采取相应的措施。

因此,如果您检测到网络故障,并在退出前向用户显示一条消息,如"无法继续;您的文档已自动保存",则您捕获了一个错误并中止,但仍然存在故障。

所有这些术语都有点模糊,尤其是错误和失败。它们的意思基本上是一样的:出了问题。程序中止可能是指调用C库标准中止函数,该函数会引发SIGABRT信号。这通常会导致不合理的程序终止,但取决于平台和信号是否被捕获。Trap通常指由C库标准信号函数控制的信号捕获。