linux c段错误,Linux C中段错误
1.什么是段错误?
所谓的段错误就是指访问的超出了系统所给这个程序的空间,通常这个值是由gdtr来保存的,他是一个48位的,
其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt
是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的
信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentati fault就出现了。
通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的。
2.那什么操作会引起段错误呢?
粗略的分一下类:
1)往受到系统保护的内存地址写数据
有些内存是内核占用的或者是其他程序正在使用,为了保证系统正常工作,所以会受到系统的保护,而不能任意访问。
2)内存越界(数组越界,变量类型不一致等)
3)其他
例如:
<1>定义了指针后记得初始化,在使用的时候记得判断是否为
<2>在使用数组的时候是否被初始化,数组下标是否越界,数组元素是否存在等
<3>在变量处理的时候变量的格式控制是否合理等
3.那么我们如何去发现程序中的段错误呢?
通过学习前人的经验和开发的工具,不断的尝试和研究,找出更恰当的方法来避免、发现并处理它。对于一些常见的地方,我们可以避免,对于一些“隐藏”的地方,我们要发现它,发现以后就要及时处理,避免留下隐患。
用gdb来调试,在运行到段错误的地方,会自动停下来并显示出错的行和行号,gdb也是最常用的,如果需要用gdb调试,记得在编译的时候加上-g参数。
linux c段错误,Linux C中段错误相关推荐
- linux内存段页,linux内存管理-段式和页式管理
该博文参考国嵌视频和http://www.cnblogs.com/image-eye/archive/2011/07/13/2105765.html,在此感谢作者. 一.地址类型 物理地址:CPU通过 ...
- linux/unix 段错误捕获【续】
本文为"在C/C++中捕获段错误,打印出错的具体位置"的续篇,进一步解决涉及动态链接库的情况. 背景知识: ·linux/unix下动态链接库的基本原理 ·/proc/pid/ma ...
- linux程序运行段错误,Linux下的段错误产生的原因及调试方法
Linux下的段错误产生的原因及调试方法 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来 说,段错误就是指访问的内存超出 ...
- 宋宝华:让Linux的段错误(segmentation fault)不再是一个错误
今天周末,娃儿们配合不闹事,写一篇短小精悍的文章吧,反正文章长了大家也没时间看.今天文章的目标是,如何在进程访问空指针等情况下,产生段错误后,不再退出而是继续运行. 这件事情,对于熔断(meltdow ...
- linux内存不足+段错误,Linux系统内存错误产生的原因及调试方法(段错误|core dumped)[转]...
产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来 ...
- linux at24c 前几个字节错误,Linux下的段错误产生的原因及调试方法
简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由 ...
- linux java 段错误的是,Linux下的段错误产生的原因及调试方法 转
1楼 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个 ...
- Linux内存不够调试,Linux系统内存错误调试方法
而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由g ...
- linux 内存出错位置,Linux系统内存错误产生的原因及调试方法
而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由g ...
- linux sysinfo结构体,编译BusyBox出现错误: struct sysinfo 重定义 该如何解决?
Busybox 1.13.3和其他的1.16版本都是如此 arm-linux-gcc version=4.3.3 ====================================== ...
最新文章
- 迭代var()内置函数的时候出现RuntimeError: dictionary changed size during iteration的解决办法...
- linux软raid的基本设置
- Archlinux 下的 VMWare Workstation 维护笔记
- 谈谈document.ready和window.onload的区别
- python基础系列:类
- 《一个程序猿的生命周期》读后感
- boost::system模块实现新类别错误代码的创建和使用的测试程序
- wpf 将Style应用到 ListView 中的 ListViewItem 元素
- PHP删除目录及目录下所有文件
- php foreach结果如何保存_每天一个PHP语法四引用使用及实现
- conda 命令 直接安装 OpenCV[Anaconda]
- 类图中表达总体与局部的关系_软件工程测试题3
- 如何获得base64图片的高度_如何使坡口机工作的高度获得提升
- Atitit 学习的本质 团队管理与培训的本质 attilax总结 1. 学习的定义	1 2. 学习的本质是数据的处理,海量的数据,处理能力有限的大脑	2 2.1. 摘要(缩小数据体量。。这个过程有
- java 生成 序列号_Java并发编程-生成唯一序列号
- 有意思的域名Hack网站
- Linux下NTP服务器配置
- windows系统日志服务器搭建,windows 配置日志服务器
- 电影《失控玩家》:软件2.0,让游戏角色“觉醒”了?
- void main java_详细讲解Java中的main()方法