- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Segmentation fault报错 从字面上来翻译叫做分段错误.这个错误是由于访问了非法内存地址而引起的,因此,产生这个错误的原因就可能是以下几种: 1,数组越界. 这个很好理解,就是本来只定义了一个char s[10]的数组,却在程序中访问了s[10].当然在程序中若出现问题是不可能这么显而易见的. 2,访问空,野指针或未被初始化的指针. 空指针是指值为NULL的指针,不指向任何内存; 野指针是指值不确定的指针,指向不确定的内存; 未被初始化的指针和野指针一样,其值是不确定的. 用一个处理文件的例子来说明: 这个程序是想计算文件中有多少行含有字符# #include /*假定文件的每一行最大长度不超过300*/ #define BUFF_LINE 300 int main() { char FileCont[BUFF_LINE]; char* str=FileCont; int couter=0; FILE* fp; if ( (fp = fopen( file_refer.cfg, r ) ) == NULL) { printf( File could not be opened\n ); exit(0); } fgets(str,BUFF_LINE,fp); while(!feof(fp)) { /*处理每一行*/ while(*str!=\0) { if (*str==#) { couter++; break; } else str++; } fgets(str,BUFF_LINE,fp); } fclose(fp); printf(%d,couter); return 0; } 这个程序看起来没什么问题,而且很有可能运行正确(当文件小的情况下),可是一旦文件长度超过300的时候,就可能会出问题了.300?不是定义的允许一行的长度么?怎么变成文件长度了?原因在于在处理一行之后,并没有将指针str的值重置为数组FileCont的开始.而是指向了FileCont加上若干长度的地址(一行的长度或者是到一行开始到#的长度).这样一旦文件的行数很多,总长度很长,那么str就会越过数组的边界访问非法的内存地址. 黑客技术中有一种缓冲区溢出攻击,就是应用的这个原理,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。
段错误 一般都是非法内存操作,例如数组越界,例如申请a[5],却访问到a[5]或者a[6],这也会有很多情况,可能是循环操作时循环变量控制有问题,可能是字符串拷贝时长度发生溢出 指针指向了非法内存,例如申明一个指针,但是没有对指针进行初始化,直接就引用,或者引用里面的元素或者函数,或者没有分配内存就进行释放等,另外,申请内存还要检查是否申请成功,如果没有申请成功也会出现这种情况 单步调试或者加打印信息,细心一点总可以找到错误的,注意编译成调试版本 如果是linux,可以产生core文件,从core文件查看出错的地方
/blog/article.php?tid_700.html
用户名:密? ?码:
1?
最
可恶的Segmentation faults之初级总结篇
作者: falcon ? 发表日期: 2006-09-27 15:20 ? \o /blog/article.php?tid_700.html 复制链接
背景??? 最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛的一个问题。不过,目前写一个一千行左右的代码,也很少出现段错误,或者是即使出现了,也很容易找出来,并且处理掉。??? 那什么是段错误?段错误为什么是个麻烦事?以及怎么发现程序中的段错误以及如何避免发生段错误呢???? 一方面为了给自己的学习做个总结,另一方面由于至今没有找到一个比较全面介绍这个虽然是“FREQUENTLY ASKED QUESTIONS”的问题,所以我来做个抛砖引玉吧。下面就从上面的几个问题出发来探讨一下“Segmentation faults吧。目录1。什么是段错误?2。为什么段错误这么“麻烦”?3。编程中通常碰到段错误的地方有哪些?4。如何发现程序中的段错误并处理掉?正文1。什么是段错误?下面是来自A的定义:
A segmentation fault (often short
您可能关注的文档
- Linux原理与设计chap 6 进程通信.ppt
- liu9-7方向导数与梯度.ppt
- MAN BW电控机型简介.ppt
- MATLAB程序设计教程 第2章MATLAB矩阵及其运算.ppt
- MATLAB程序设计教程 第9章MATLAB图形句柄.ppt
- MATLAB程序设计教程 第11章Simulink动态仿真集成环境.ppt
- MATLAB程序设计教程 第12章MATLAB外部接口技术.ppt
- Matlab图像处理 第3章 图像代数运算与逻辑运算.ppt
- MBA_消费者行为学案例分析.ppt
- MR常规序列应用(马晓晖).ppt
- 2023-2024学年广东省深圳市龙岗区高二(上)期末物理试卷(含答案).pdf
- 2023-2024学年贵州省贵阳市普通中学高一(下)期末物理试卷(含答案).pdf
- 21.《大自然的声音》课件(共45张PPT).pptx
- 2023年江西省吉安市吉安县小升初数学试卷(含答案).pdf
- 2024-2025学年广东省清远市九校联考高一(上)期中物理试卷(含答案).pdf
- 广东省珠海市六校联考2024-2025学年高二上学期11月期中考试语文试题.pdf
- 2024-2025学年语文六年级上册第4单元-单元素养测试(含答案).pdf
- 2024-2025学年重庆八中高三(上)月考物理试卷(10月份)(含答案).pdf
- 安徽省安庆市潜山市北片学校联考2024-2025学年七年级上学期期中生物学试题(含答案).pdf
- 贵州省部分校2024-2025学年九年级上学期期中联考数学试题(含答案).pdf
文档评论(0)