CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

请问什么是Segmentation Fault错误?

楼主mssachem(sachem)2003-06-01 19:46:56 在 Linux/Unix社区 / 程序开发区 提问

我在Linux下用C编了一个程序,编译连接都没错,但一运行就出现  
  Segmenttion   Fault错误,并且终止运行。请问怎么会出现这种错误? 问题点数:100、回复次数:5Top

1 楼TripleX(最爱小招)回复于 2003-06-01 20:00:05 得分 50

访问了非法的内存地址,也叫越界访问。比如  
  char   *p;  
  p   =   (char   *)malloc(10);  
  p[15]   =   'c';  
  访问到了没有分配的地址,不过一般这么近的越界不一定会引发SIGSEG,  
  你可以编译时加上-g选项,然后用gdb跟一下看看什么地方指针不对了。Top

2 楼CoolQ()回复于 2003-06-02 01:50:38 得分 50

原因很多,大部分原因是由于访问了无法访问的地址,或者是岂图求该只读型的内存而产生的错误。  
  举例如下:  
  第一个例子:  
  main()  
  {  
      int   *p;  
      p   =   (int   *)&p   +   2;//   p现在指向main的返回地址  
      *p   =   0x40000000;将main的返回地址修改成0x40000000,不可访问  
  }  
  当这段程序执行以后,main的返回地址变成0x40000000,glibc将试图从0x40000000处继续执行,但是由于内存不可访问而出错。  
  第二个例子:  
  main()  
  {  
      char   *p="Hello";  
      p[1]   =   "A";   //p此时为静态指针,所指向的内存为只读,不能修改!  
  }  
  这个程序执行后,由于p所指的内存不可写,也会出现segmentation   fault.  
  TripleX(最爱小昭)的例子,运行的时候不一定出现segmentation   fault,但是不是正确的程序Top

3 楼chatboy218(小宁)回复于 2003-06-02 07:29:44 得分 0

我也同意楼上的看法Top

4 楼ph4nt0m(aXis)回复于 2003-06-02 13:33:17 得分 0

缓冲区溢出同样会造成segmentation   fault,就是像楼上说的:由于访问了无法访问的地址,或者是岂图求该只读型的内存而产生的错误。  
   
  比如  
  char   buf[10];  
  strcpy(buf,argv[1]);  
   
  当argv[1]超过10的时候会溢出,造成segmentation   fault  
   
  当然由于gcc可能会填充一些字节,所以可能需要更多字节才能造成溢出。Top

5 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2003-06-02 13:38:57 得分 0

内存非法访问出现的,包括一些系统调用中使用的资源(互斥量、信号量)没有初始化或者被释放Top

相关问题

  • 奇怪的segmentation fault 错误!!!!!!!!!!!!!!
  • 出现segmentation fault 的错误后如何修复系统!!!
  • 急啊,UNIX 里 出现运行时错误“Segmentation Fault - core dumped”如何解决?
  • 什么错误???
  • 什么错误?
  • 什么错误???
  • 什么错误?
  • 什么错误
  • 为什么错误?
  • 什么错误啊??

关键词

  • 内存
  • 执行
  • x40000000
  • segmentation fault
  • 访问
  • 错误
  • 地址
  • 溢出
  • 程序
  • 例子

得分解答快速导航

  • 帖主:mssachem
  • TripleX
  • CoolQ

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo