繁体   English   中英

什么时候可以保证分段错误?

[英]When is a segmentation fault guaranteed?

我正在学习c ++,并且已经知道由于不确定的行为而可能发生段错误。 但是,是否有过某些情况会确保发生段错误? 还是总是不确定的行为?

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

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

在具有内存保护功能的现代OS上,当您访问自己不拥有的内存时,始终可以确保出现段错误。 取消引用nullptr肯定会导致它。 访问随机地址可能不在您进程的地址空间之内,因此可能会导致段错误(因此,为什么访问未初始化的指针或悬空的指针通常会导致段错误)。 在缺少内存保护的AmigaOS或经典Mac OS上,访问随机指针不会引起段错误。 相反,您可以覆盖OS或其他进程的内存(这可能是灾难性的)。

基本上,segfault是一个OS概念,而不是C ++概念,因此在C ++中导致一个错误的方法取决于您所运行的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM