gpt4 book ai didi

c++ - 什么会导致 C++ 中的段错误?

转载 作者:IT老高 更新时间:2023-10-28 14:02:09 25 4
gpt4 key购买 nike

我注意到 C++ 中的段错误的常见原因列表没有问题,所以我想我会添加它。

自然是社区 Wiki,因为没有一个正确答案。

我认为这可能对学习 C++ 的新程序员有用,如果您不同意,请随时关闭它。

最佳答案

仅当您的操作系统具有 MMU (Memory Management Unit) 时,对内存的错误访问才会导致段错误。否则,你不会得到它,只会出现奇怪的行为。

虚拟内存(你可以访问的整个内存 = 2^(sizeof(pointer_type)*8)(即:2^num_bits_in_pointer_type))映射到物理以页或段为单位的内存(分页取代了分段,但仍在使用)。

每个页面都有一些保护权限,如果您尝试从具有非读取访问权限的页面读取,则会出现段错误。如果您尝试写入只读位置,您将获得 SIGSEGV。

如果你有一个未初始化的指针并使用它,它可能会指向另一个好的位置,这样你就不会遇到段错误。如果您在绑定(bind)后读取一个小数组,如果它没有超过页面边界,则可能会损坏其他内存区域。

此外,由于页面很多,并非所有页面都真正映射。如果你触摸一个非映射页面,你会得到一个段错误。实际上,对非映射页面的任何访问都必须考虑写入时复制、交换页面、延迟加载、内存映射文件和其他事情。见 this article on page fault handling ,尤其是那里的第二张图,也发布在下面(但请阅读文章以获得更多解释)

page fault handling
(来源:champ at vistech.net)

您主要对用户空间中发生的事情以及通向 SIGSEGV 的所有路径感兴趣。但内核空间也很有趣。

关于c++ - 什么会导致 C++ 中的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6923574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com