何时保证分段错误?

时间:2018-01-31 20:48:39

标签: c++ segmentation-fault

我正在学习c ++,并且我已经了解到,由于未定义的行为,会发生段错误。是否有过保证会发生段错误的情况?或者它总是未定义的行为?

1 个答案:

答案 0 :(得分:6)

当您尝试读取或写入您无权访问的内存时,会出现具有内存保护的操作系统中的段错误 - 特殊值(如nullptr),为操作系统保留的内存或其他进程的内存。

由于操作系统引发了段错误,因此它们本身就是特定于平台的概念。在Windows上导致段错误的东西不一定会导致例如段错误AmigaOS。与平台无关的C ++标准甚至没有提到段错误。

在具有内存保护的现代操作系统上,当您访问不拥有的内存时,可以始终确保段错误。解除引用nullptr将导致肯定。访问随机地址可能不在您的进程的地址空间内,因此可能会导致段错误(因此访问未初始化的指针或悬空指针通常会导致段错误)。在缺乏内存保护的AmigaOS或经典Mac OS上,您无法通过访问随机指针获得段错误。相反,您可能会覆盖操作系统或其他进程的内存(这可能是灾难性的)。

基本上,段错误是一个操作系统概念,而不是C ++概念,因此你可以用C ++创建一个概念取决于你运行的是什么。