易截截图软件、单文件、免安装、纯绿色、仅160KB

linux 下c 程序 段错误 分析

fopen("/var/spool/cron/tmp","w+");
/////////////////////////////////////////
#i nclude <sys/types.h>
#i nclude <sys/stat.h>
#i nclude <fcntl.h>
#i nclude <unistd.h>
#i nclude <stdio.h>
#i nclude <string.h>
#i nclude <stdlib.h>
int main(){
int ret=-1;
printf("*************************************** delPolicy  ***************************************************\n");
FILE *f;
f=fopen("var/spool/cron/tmp","w");
if(f==NULL)
{
  printf("open tmp failed!\n");
  fclose(f);
  return -1;
}
printf("open two files successfully!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
fclose(f);
ret=0;
printf("*************************************** delPolicy  ***************************************************\n");
return ret;
}
出现段错误:
 原因:1:"/var/spool/cron/tmp"错写成"var/spool/cron/tmp"
      2:文件名不能为tmp关键字,可为mytmp
产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.
一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,它是一个48位的寄存器,
其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,
指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址,以及与此相应的段限和页面交换,
还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation fault就出现了.
在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的
1)访问系统数据区,尤其是往  系统保护的内存地址写数据最常见就是给一个指针以0地址
2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域
解决方法
我们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的。
如何快速定位这些"段错误"的语句
     1  dummy_ (void)
     2&n


相关文档:

linux 下压缩、解压 打包命令

ZZ 自http://dev.firnow.com/course/6_system/linux/Linuxjs/200896/139627.html     
      .tar
  解包: tar xvf FileName.tar
  打包:tar cvf FileName.tar DirName
 
 (注:tar是打包,不是压缩!)
  --------------------------------------------- ......

我的Linux之路① RHEL安装

       今天很果断的把一直在虚拟机上安装的Linux卸载了,感觉试了一小段时间在VMware上面安装的Linux,使不出感觉来。更为重要的是据说(我也只能道听途说了)java程序开发很多是在Linux环境下开发的(难道是因为在Linux下运行?)。为了更加的接近生产,我决定安装双系统。
 &n ......

学生管理系统(c/cpp)

#include
using namespace std;
typedef struct lnode
{
    long sno;
    char name[20];
    struct lnode *next;
}LNode, *LinkList;
LinkList InitList()
{
    LinkList head;
    head = new LNode;
 &nb ......

C 编程最佳实践


简介
本文是为了满足开发人员的需要而写的。我们总结了一套指南,无论作为开发人员还是顾问,这些指南多年来一直都很好地指导着我们,我们把它们作为建议提供给您,希望对您的工作有所帮助。您也许不赞同其中的某些指南,但我们希望您会喜欢其中的一些并在您的编程或移植项目中使用它们。
风格与指南
使用一种使代码具 ......

c和c++下用栈实现数的进制转换

1. C的实现
//stack.h
#ifndef STACK_H
#define STACK_H
#define STACK_CAPACITY 20//maximum size of stack
typedef int stackEle;
typedef struct
{
stackEle myArray[ STACK_CAPACITY ];
int myTop;
}stack;
//construct(initialize) an empty stack
stack *stack_init(void);
//return 1 if stack is em ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号