段错误解决办法

问题,再程序(vfork函数的使用)运行时,显示段错误。html

image

网络解答:编程

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

    一旦一个程序发生了越界访问,cpu就会产生相应的保护,因而segmentation fault就出现网络

了经过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,函数

要么是受到系统保护的,还有多是缺乏文件或者文件损坏。post

段错误的常见形式debug

编程中如下几类作法容易致使段错误,基本上是错误地使用指针引发的。3d

1)访问系统数据区,尤为是往系统保护的内存地址数据最多见就是给一个指针以0地址。指针

2)内存越界(数组越界,变量类型不一致等): 访问到不属于你的内存区域。htm

解决方法:咱们在用C/C++语言写程序的时候,内存管理的绝大部分工做都是须要咱们来作的。实际上,内存管理是一个比较繁琐的工做,不管你多高明,经验多丰富,不免会在此处犯些小错误,而一般这些错误又是那么的浅显而易于消除。可是手工“除虫”(debug),每每是效率低下且让人厌烦的,本文将就"段错误"这个内存访问越界的错误谈谈如何快速定位这些"段错误"的语句。

解决方案:由于vfork()建立子进程后严禁return,故须要用exit(0),成功。

转载于:https://www.cnblogs.com/msxk/p/4049248.html