Linux 上的分段错误是啥?
Posted
技术标签:
【中文标题】Linux 上的分段错误是啥?【英文标题】:What is a segmentation fault on Linux?Linux 上的分段错误是什么? 【发布时间】:2011-03-13 03:31:30 【问题描述】:在 Linux 中:
什么是分段错误?我知道它会使程序崩溃,但这是某种内存泄漏问题,还是完全不相关的问题?还有,你是怎么处理这些的? 这通常是计算机设置的问题,还是应用程序本身的问题?
另外,其他操作系统也会出现这种情况吗?
【问题讨论】:
***.com/questions/2346806/what-is-segmentation-fault 在 Windows 上,“分段错误”称为“访问冲突”。相同的东西,只是名称不同。 在 Mac OS 上,您有时会收到总线错误 -_-。 What is a segmentation fault?的可能重复 【参考方案1】:分段错误是指您的程序尝试访问未被操作系统分配或不允许访问的内存。
“分段”是指计算机上的每个进程都有自己独特的虚拟地址空间。因此,当进程 A 读取内存位置 0x877 时,与进程 B 读取自己的 0x877 时相比,它读取驻留在 RAM 中不同物理位置的信息。
所有现代操作系统都支持和使用分段,因此都可能产生分段错误。
要处理分段错误,请修复导致它的代码。它通常表示编程不佳,尤其是边界条件错误、不正确的指针操作或对共享库的无效假设。有时段错误和任何问题一样,可能是由硬件故障引起的,但通常情况并非如此。
【讨论】:
分段错误独立于虚拟地址空间。 正如我所解释的,“分段”错误这个名称来自不同的虚拟地址空间。在应用程序使用物理地址而不进行转换的领域中,上下文切换将非常昂贵。这些概念密不可分。 我相信 Porges 指的是当您尝试写入只读内存时也会发生分段错误,这实际上是与虚拟内存无关的功能。 是的,正确的,当访问通过 mprotect() 或直接由操作系统等保护的内存时,您会遇到段错误。我的第一行是解释段错误 是 .接下来的几行试图解释为什么和如何。也许我应该不那么冗长。 我并不是说你直接错了,只是这个概念不依赖于此:) 也许我应该写一个更长的句子......【参考方案2】:“段错误”是指程序访问受保护或无效的内存;通常是由于糟糕的内存管理或错误的指针操作。
操作系统检测到无效的内存访问并导致应用崩溃。
【讨论】:
以上是关于Linux 上的分段错误是啥?的主要内容,如果未能解决你的问题,请参考以下文章