C语言中什么是、、段错误、、引起段错误的原因有哪些?

Python012

C语言中什么是、、段错误、、引起段错误的原因有哪些?,第1张

在编程中以下几类做法容易导致段错误,基本上是错误地使用指针引起的。所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的。

段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gd tr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存 相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向 的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起 始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。

1.

段错误一般是当你访问了未申请的内存或非法的内存时产生的。主要还是程序的内存管理有问题。

2.

其实打开文件是将文件指针读到一个内存中,来进行操作。lz的这种情况,文件路径有问题,就会使程序中内存的读入产生问题,产生断错误。

3.

建议lz上网搜索关键字“C++内存管理”,再进一步深入这个问题。

在 C 程序中,经常会遇到段错误(Segment error),这种问题出现的原因可能如下:

对一个 NULL 指针解引用;

访问程序进程以外的内存空间。

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