分段错误是程序试图以无效方式访问内存区域时发生的计算机错误。这些错误可以是读取错误,即试图读取未正确初始化的数据,或写入错误,当一个程序试图将数据写入内存中不正确的位置时。用计算机的说法,这个术语通常被缩短为...
分段错误是程序试图以无效方式访问内存区域时发生的计算机错误。这些错误可以是读取错误,即试图读取未正确初始化的数据,或写入错误,当一个程序试图将数据写入内存中不正确的位置时。用计算机的说法,这个术语通常被缩短为segfault。由于segfaults既可以发生在数据读写中,也可以出现在各种上下文中,并且具有不同的特定名称,包括总线错误、缓冲区溢出、页错误,和存储冲突。允许程序员显式处理内存的计算机语言,如C语言,允许用户在编程不好的情况下相对容易地引入无意的段错误。虽然某些计算机语言比其他语言更容易产生分段错误,segfaults不是计算机语言本身的一部分。理论上讲,任何计算机语言都可能导致产生segfault的数据写入错误。允许程序员显式处理内存的计算机语言,如C,允许用户在编程不好的情况下相对容易地引入无意的segfaults。不这样做的语言允许显式内存管理,如Java,可以在不受程序员干扰的情况下处理大多数内存问题,从而使程序员无法有目的地访问分配内存之外的区域,从而最大限度地减少分段错误。程序员创建分段错误的方式因数据的方式而异正在使用。有某些构造更容易创建此错误。segfault的一个常见原因是数组溢出错误,在这种错误中,特定数据包含在特定内存位置的插槽中,但程序员试图访问不存在的插槽。这些情况下产生的segfault通常很难追查有些计算机语言有边界检查,它可以预测这种类型的错误,并且不会让用户尝试访问无效的插槽。当两种计算机语言使用代理在彼此之间传递数据时,会出现生成分段错误的较不常见的方式。在这种情况下,分段错误尤其难以诊断,因为它并不总是清楚错误来自哪种语言或哪一层编程代码。即使某一层具有隐式边界检查,并且在99.9%的上下文中不允许出现分段错误,确定错误的来源可能是一项非常耗时和乏味的工作。避免分段错误的最佳方法是对内存管理非常谨慎。大多数好的编程实践都建议用户显式释放程序中手动分配的每个字节的内存。这通常很难做到但是正确地做会增加程序员创建健壮、无错误程序的机会
-
发表于 2020-08-07 05:22
- 阅读 ( 1241 )
- 分类:电脑网络