当前位置:  技术问答>linux和unix

为什会出现段错误

    来源: 互联网  发布时间:2015-10-18

    本文导语:  我有一段程序如下:       1 #include        2 #include        3       4 #include        5 #include        6       7 int get_file_size(char *path, off_t *size)       8 {       9     struct stat file_stats;...

我有一段程序如下:
      1 #include 
      2 #include 
      3
      4 #include 
      5 #include 
      6
      7 int get_file_size(char *path, off_t *size)
      8 {
      9     struct stat file_stats;
     10
     11     if(stat(path,&file_stats))
     12         return -1;
     13
     14     *size = file_stats.st_size;
     15     return 0;
     16 }
     17
     18 int main(void)
     19 {
     20     off_t size;
     21     get_file_size("/root/myperl",&size);
     22     printf("filesize=%dn",size);
     23     return 0;
     24 }
     以上是可以正常编译通过的没有错误
     
     但是我把主函数改成如下:
     int main(void)
     {
         off_t *size;
         get_file_size("/root/myperl",size);
         printf("filesize=%dn",*size);
         return 0;
     }
     编译可以通过,但运行的结果如下:
     filesize=205
     段错误
     
     请问这为什么,是什么原因? 



|
这是因为你在后面的程序声明的是一个指针,这个指针并没有指向有效的存储空间。当函数get_file_size在执行*size=...一条命令时,由于向无效区域写数据而产生段错误。

|
没有分配内存,指针指向一个随机的地址。

|
看来你不太明白指针是什么。指针只是指向一块内存的地址的变量而已,没有存储空间的,象*size = file_stats.st_size;对于一个没有固定地址的指针来说,一旦退出函数体,file_stats.st_size就无效了,这样这个size指针就很危险了。

    
 
 

您可能感兴趣的文章:

  • C++ I/O 成员 bad():如果出现错误则返回true
  • java.net.URLConnection中getOutputStream()方法出现协议不支持输出流的错误,请问为何会出现此错误?
  • C++ I/O 成员 fail():如果出现错误则返回true
  • 为什么在有的地方用以下的方法,会出现“无效的游标状态”的错误,出现错误的时候要加上rs.next()才能执行,但在另一些地方同样只有以下
  • Linux下怎样查c程序的错误号?程序出现错误:System error 32: Broken Pipe, 是什么原因?
  • 请问rpm -ivh 出现下面错误是什么样错误?(急!!!!!!!!!!!!)
  • 如果出现某种错误或异常,就在网页里出现相关信息,比如连接超时,就显示系统正忙,该怎么做呀?
  • 使用Runtime.exec("calc.exe")时,编译 出现错误,看不懂这个错误,怎么回事?
  • 想用"|"来分离字符串,但用String.split("|")总是出现错误,总是多分离出一个空串,如果字符串中有空格那错误更多。
  • tcp协议会出现丢包或者数据错误吗?
  • 用vmware安装Fedora出现的错误
  • 内核编译出现前所未有的错误
  • 安装fedora11出现错误
  • fedora15启动失败,出现下面错误信息
  • 请问添加yum后 ,出现如下错误
  • 安装 Jbuilder7.0 居然出现错误[Error -1] 是什么原因?
  • Linux虚拟机启动出现错误
  • dlerror()函数返回错误出现错误
  • 安装solaris出现speedo:report_error(4106)错误
  • ftp连接出现socket错误=#10054的解决方法
  • 在solaris8上编译完成,链接的时候出现Segmentation Fault - core dumped这种错误,请问是什么原因??
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ MultiMaps 成员 count():返回一个元素出现的次数
  • 是否有人知道linux启动时最先出现的小企鹅图标在那儿出现的?
  • C++ Maps 成员 count():返回指定元素出现的次数
  • 我是root用户,却在桌面上出现加锁的文件。还有总是出现“???”的文件夹?怎么回事啊?
  • C++ I/O 成员 good():如果没有出现过错误则返回true
  • 用jdk的appletviewer xxx.html时会出现两个窗口,能否让它只出现一个窗口.
  • 为什么会出现这样的问题?出现了怎么解决?
  • 我用7.2进行服务器模式安装,随后对XWINDOW进行配置,重启之后虽然出现登陆图形界面,但进去之后,桌面上只出现一个X形鼠标,其他均无任何图标
  • 在JBuilder中,为什么编写的代码中,当代码出现关键字时,后面的部分代码就移位了,当在有关键字的那些代码行进行选择时,也会出现鼠标位
  • 新用linux的GDB, 版本是出现6.3.3.0,出现奇怪问题, 可能是环境设置的问题, 大人帮忙
  • 执行PROC出现出现灵异事件
  • 问出现乱码?
  • 安装fedora4 出现问题
  • 我的输入出现问题怎么办?
  • 串口转USB出现乱码
  • linux服务器,大磁盘挂载分区,不定期出现“只读”现象
  • liunx升级内核的时候出现的问题
  • 安装Redhat8.0出现问题,请高手帮帮忙,谢谢!
  • 在solaris8上编译完成,链接的时候出现Segmentation Fault - core dumped这种错误,请问是什么原因?? iis7站长之家
  • 为什么我一直出现connection refused!
  • 在redhat linux 8.0 中文板上 , 有些地方出现乱码问题!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3