Blu*_*ber 2 c++ segmentation-fault
我正在学习c ++,并且我已经了解到,由于未定义的行为,会发生段错误.是否有过保证会发生段错误的情况?或者它总是未定义的行为?
当您尝试读取或写入您无权访问的内存时,会出现具有内存保护的操作系统中的段错误 - 特殊值,例如nullptr,为操作系统保留的内存或其他进程的内存.
由于操作系统会引发段错误,因此它们本身就是特定于平台的概念.在Windows上导致段错误的东西不一定会导致例如AmigaOS的段错误.与平台无关的C++标准甚至没有提到段错误.
在具有内存保护的现代操作系统上,当您访问不属于您的内存时,可以始终确保段错误.取消引用nullptr肯定会导致它.访问随机地址可能不在您的进程的地址空间内,因此可能会导致段错误(因此访问未初始化的指针或悬空指针通常会导致段错误).在AmigaOS或缺乏内存保护的经典Mac OS上,您不会因访问随机指针而受到段错误的影响.相反,您可能会覆盖操作系统或其他进程的内存(这可能是灾难性的).
基本上,段错误是一个操作系统概念,而不是C++概念,所以你可以用C++创建一个概念取决于你运行的是什么.