在 C 程序中,经常会遇到段错误(Segment error),这种问题出现的原因可能如下:
对一个 NULL 指针解引用;
访问程序进程以外的内存空间。
实际上,第一个原因可以归到第二个原因。在一个 C 程序的虚拟内存空间中,从低地址到高地址依次是代码区,堆区(向上增长),栈区(向下增长),最上是常量区。其中 NULL 指针的位置正好是虚拟内存中地址为 0 的位置,而这个位置是不属于以上 4 个区域的,同理一些比较低的地址也不属于这四个区,所以造成段错误的原因是访问了程序虚拟内存空间 4 个区以外的地址。在平时的开发中,最大的可能还是对 NULL 进行了解引用。