"如果C++指针被删除两次,它可能会导致陷阱" - 陷阱意味着什么?

ath*_*hos 1 c++ terminology

我遇到了这样的C++测验:如果指针被删除两次会发生什么?

  • A)它可以中止程序
  • B)它可能导致失败
  • C)它可能导致错误
  • D)它可能导致陷阱

答案是D.

我有点失落,"陷阱"是什么意思?它是C++中的一个特殊术语吗?

Mik*_*our 7

它在C++中没有任何意义.它可能意味着操作系统级错误(例如Posix信号),但没有上下文我不能说.

正确的答案是它会导致不确定的行为; 但是所有答案都可以被认为是正确的,因为未定义的行为可能导致任何这些事情发生.


Lig*_*ica 6

我将直接引用有关陷阱的维基百科文章:

在计算和操作系统中,陷阱(也称为异常或故障)通常是[NB 1] [1]一种通常由异常条件引起的同步中断(例如,断点,除零,无效的存储器访问) ).陷阱通常导致切换到内核模式,其中操作系统在将控制返回到原始进程之前执行一些动作.系统进程中的陷阱比用户进程中的陷阱更严重,并且在某些系统中是致命的.在某些用法中,术语陷阱特指用于启动上下文切换到监视程序或调试器的中断.

这是高度通用的术语,并不是由C++定义的,更不用说特定于它了.更重要的是,您必须注意多选答案中的"可以",因为无法保证在双重删除对象时会发生任何事情.

事实上,所有四个答案基本上都说同样的事情.

测验似乎很混乱,因为"删除指针 "可能不是它的意思.

不要与SNMP陷阱混淆:

在SNMP中,陷阱是一种PDU,用于报告有关受管子系统的警报或其他异步事件.

  • 一个*也可以*在这里引用C标准来支持:"3.19.5**执行一个陷阱**中断执行程序,这样就不再执行进一步的操作" (2认同)