【发布时间】:2014-09-24 21:35:48
【问题描述】:
当您访问不应该访问的内存时会发生分段错误。例如,当您取消引用数组绑定之外的地址时,也可能出现这种情况。标准将此定义为未定义的行为,那么当在这种情况下发生未定义的行为时会发生分段错误吗?
换句话说,分段错误是否是 UB 的结果,并且与执行内存访问冲突时发生的任何其他行为一样可变?
【问题讨论】:
-
好吧,如果未定义的行为意味着任何事情都可能发生,那么分段错误就是可能发生的事情之一。
-
哇,这越来越哲学了。无论如何,UB 可以是任何东西,但有些可以被认为“极有可能导致平台 X 上的分段错误”。此外,一些平台可以提供一种实现定义的、可靠的引发段错误(或其 Windows 等效项,访问冲突)的方式,在这种情况下,它不会是未定义的行为。
-
@Medinoc "未定义的行为" 的意思是 "C++ 标准未定义"。
-
分段错误可能在您访问不该访问的内存时发生。
-
这样说:标准从不说“这会导致分段错误”。因此,如果您遇到分段错误,它要么是未定义的行为,要么是在您的代码之外。