易截截图软件、单文件、免安装、纯绿色、仅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下创建数据库表(sqlite3)的脚本

本文以数据库中的数据表UserInfo为实例展示数据库表的创建及数据记录的录入。
#!/bin/sh
#variables definition
#database location
db=/conf/db
#
#create table userInfo
#name: User name
#passwd: Password
#Privilege: User privilege -- Administrator:0 Operator:1
#
echo "create table UserInfo(n ......

Linux下的定时器:alarm()与 setitimer()

Linux下的定时器有两种,以下分别介绍:
 
1、alarm
 
如果不要求很精确的话,用alarm()和signal()就够了
 
unsigned int alarm(unsigned int seconds)
 
函数说明:
alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds为0,则之前设置的闹钟会被取 ......

优化C代码常用的几招

优化C代码常用的几招
在性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。
第一招:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我 ......

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号