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

段错误问题

    来源: 互联网  发布时间:2016-07-01

    本文导语:  写了一段代码,是向文件中写数据,但不知道为什么可以执行 写文件也正常,就是总打印奇怪信息,哪位帮看看啊,急等!非常感谢。  代码:  #include   #include   #include "fcntl.h"  #include "stdlib.h"  #include "stdio.h"...

写了一段代码,是向文件中写数据,但不知道为什么可以执行 写文件也正常,就是总打印奇怪信息,哪位帮看看啊,急等!非常感谢。 
代码: 
#include  
#include  
#include "fcntl.h" 
#include "stdlib.h" 
#include "stdio.h" 
#include "string.h" 
#include "ctype.h" 
#define MAX 500 
//This function being used to open the xfs's projects file. 
static FILE* openprofile(char *file) 

FILE *profile; 
if((profile = fopen(file,"r+b")) == NULL){ 
printf("Open the projects file failure,please check the file in the etc direct.n"); 
exit(1); 

//printf("successfuln");//test info 
return profile; 

//this function being used to close the xfs projects file int the /etc 
static void closeprofile(FILE *fileid) 

fclose(fileid); 
//printf("close successfuln"); //test info 

//This function being used to write info to projects files 
static int writepro(FILE *projects,char *s) 

if(projects == NULL||s == NULL){ 
printf("File is not exit or the String is NULl,please check itu.n"); 

if(fseek(projects,0L,SEEK_END) == -1){ 
printf("SEEK Error"); 
return 0; 
exit(1); 

if(fputs(s,projects) == EOF){ 
printf("Write Errorn"); 
return 0; 
exit(1); 

rewind(projects); 
return 1; 

//This function being used to discuss a file is or is't null? 
static int isnull(FILE *file) 

long int len=-1; 
if(fseek(file,0L,SEEK_END) == -1){ 
printf("SEEK Error"); 
return 0; 
exit(1); 

len=ftell(file); 
rewind(file); 
if(len == 0){ 
return 1; 

if(len!=0){ 
return 0; 


static char* linkstring(char *pro,char *s) 

char buffer[MAX]; 
int i; 
if(pro==NULL||s==NULL){ 
exit(1); 

strcat(pro,":"); 
strcat(pro,s); 
return pro; 


static char* getentry(char src[],char result[]) 

  char *p; 
  int i; 
  p=src; 
  p = strtok(src,"/"); 
  while(1){ 
  if(p == NULL){break;} 
  for(i=0;p[i]!='';i++){ 
result[i]=*(p+i); 
  } 
  result[i]=''; 
  p = strtok(NULL,"/"); 
  } 
  return result; 

static int  getid(FILE *file) 

char **q; 
int id; 
char buffer[MAX]; 
while(!feof(file)){ 
fgets(buffer,1000,file); 
// printf(buffer); //test use 

id=strtoul(buffer,q,10); 
//printf("%dn",i); //test use 
return (id+1); 

static void quota(char *prodir,char *jid,char *dir,char *bsoft,char *bhard) 

char quota_pro[100]="0xfs_quota -x -c "; 
char quota_set[100]="xfs_quota -x -c "; 
char *pro="'project -s "; 
char *limit="'limit -p "; 
char *bs="bsoft="; 
char *bh=" bhard="; 
char d[MAX]; 
char dirbuf[MAX]; 
FILE *file; 
int id; 
if(dir==NULL||bsoft==NULL||bhard==NULL){ 
printf("Bad Error or Bad Setting Value.n"); 
exit(1); 

strcpy(dirbuf,dir); 
getentry(dirbuf,d); 
strcat(quota_pro,pro); 
strcat(quota_pro,d); 
strcat(quota_pro,"'"); 

strcat(quota_set,pro); 
strcat(quota_set,limit); 
strcat(quota_set,bs); 
strcat(quota_set,bsoft); 
strcat(quota_set,bh); 
strcat(quota_set,bhard); 
strcat(quota_set," "); 
strcat(quota_set,d); 
strcat(quota_set,"'"); 
printf("%sn",quota_set); //test use 

char linkstr[MAX]; 
file=openprofile(prodir); 
if(isnull(file)){ 
sprintf(linkstr,"%d",1); 
linkstring(linkstr,dir); 
printf("%sn",linkstr); //test use 
writepro(file,linkstr); 

else{ 
id=getid(file); 
printf("%dn",id); 
sprintf(linkstr,"%d",id); 
linkstring(linkstr,dir); 
printf("%sn",linkstr); //test use 
writepro(file,linkstr); 

//printf("test use"); //test use 
//closeprofile(file); 



int main() 
{  
//FILE *file; 
//char *dir = "51:/mnt/andir/an5n"; 
//int fileisnull; 
//file=openprofile("/mycode/projects"); 
//writepro(file,dir); 
//fileisnull = isnull(file); 
//printf("%dn",fileisnull); 
//closeprofile(file); 
//printf("test infon"); 
//char dir[MAX]="/mnt/andir/an1"; 
//linkforpro(525,''); 
//printf("%sn",dir); 
//char s1[MAX]="/mnt/andir/an1"; 
//char s2[MAX]="project an1"; 
//linkforpro(s2,s1); 
//printf(s2); 

char dirpro[]="/mnt/andir/an9n"; 
char s2[100]="100m"; 
char s3[100]="100m"; 
char s4[100]="/etc/projects"; 
char s5[100]="/etc/projid"; 
quota(s4,s5,dirpro,s2,s3); 
printf("*****************n"); 
return 0; 
/*char s[100]="1"; 
char p[100]="/mnt/andir/an1"; 
linkstring(s,p); 
printf("%sn",s);*/ 


************************************************** 
gdb单步执行的调试信息 
Starting program: /mycode/xfstest 
xfs_quota -x -c 'project -s 'limit -p bsoft=100m bhard=100m an9 


Breakpoint 1, quota (prodir=0x7ffff1af09c0 "/etc/projects", jid=0x7ffff1af0950 "/etc/projid", 
    dir=0x7ffff1af0b10 "/mnt/andir/an9n", bsoft=0x7ffff1af0aa0 "100m", bhard=0x7ffff1af0a30 "100m") at xfs_quota_set.c:147 
147                    printf("%dn",id); 
(gdb) n 
lookup 0x0000000000400000 0x0000000000000420 -> 0x00002b2ab90d4000 0x000000000004a060 /1 printf 
54 
148                    sprintf(linkstr,"%d",id); 
(gdb) n 
lookup 0x0000000000400000 0x0000000000000480 -> 0x00002b2ab90d4000 0x000000000004a1a0 /1 sprintf 
149                    linkstring(linkstr,dir); 
(gdb) n 
150                    printf("%sn",linkstr); //test use 
(gdb) n 
54:/mnt/andir/an9 

151                    writepro(file,linkstr); 
(gdb) n 
lookup 0x0000000000400000 0x0000000000000450 -> 0x00002b2ab90d4000 0x000000000005d5b0 /1 fputs 
156    } 
(gdb) n 
main () at xfs_quota_set.c:183 
183            printf("*****************n"); 
(gdb) n 
***************** 
184            return 0; 
(gdb) n 
190    } 
(gdb) n 
0x00002b2ab90f1154 in __libc_start_main () from /lib64/libc.so.6 
(gdb) n 
Single stepping until exit from function __libc_start_main, 
which has no line number information. 
      7359: 
      7359:    calling fini: /mycode/xfstest [0] 
      7359: 
      7359: 
      7359:    calling fini: /lib64/libc.so.6 [0] 
      7359: 
      7359: 
      7359:    runtime linker statistics: 
      7359:                final number of relocations: 98 
      7359:    final number of relocations from cache: 3 

Program exited normally. 

非常感谢!每次都出现 
0x00002b2ab90f1154 in __libc_start_main () from /lib64/libc.so.6 
(gdb) n 
Single stepping until exit from function __libc_start_main, 
which has no line number information. 
      7359: 
      7359:    calling fini: /mycode/xfstest [0] 
      7359: 
      7359: 
      7359:    calling fini: /lib64/libc.so.6 [0] 
      7359: 
      7359: 
      7359:    runtime linker statistics: 
      7359:                final number of relocations: 98 
      7359:    final number of relocations from cache: 3 

Program exited normally. 

|
重点排查一下 quota()函数里的有关指针引用问题,避免对空指针操作。

|
正常的

|
仔细排查野指针,内存越界

|
不是拷贝的数组越界,就是对空的指针或不存下标的数组进行了操作

|
用gdb来调试,查看调用栈,可以定位到出错的函数
剩下来,再函数里添加打印信息,看看跑到哪里死了

    
 
 

您可能感兴趣的文章:

  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • QT"段错误"问题
  • TOMCAT启动错误问题,请教! iis7站长之家
  • TOMCAT启动错误问题,请教!
  • php显示错误问题
  • Linux下调用.so引发的段错误问题
  • 关于编译的问题:这是什么错误
  • 问个弱弱的问题错误卸载硬盘根目录怎么办/dev/sda1
  • 我的sprintf有错误,不知道什么问题。
  • [求教]:NFS的连接问题.做NFS时报连接错误,据称是portmap问题,但...
  • LINUX C编程错误的一个问题
  • 奇怪的fopen问题,创建不了文件,错误号却返回0
  • SQL Server"错误 21002: [SQL-DMO]用户 * 已经存在问题解决
  • 关于硬盘错误的问题
  • 连续创建和关闭1024个socket就会出现问题,错误码24,怎么办?
  • 有关cvs的问题:总是提示 no such repository 这个错误!!!
  • 给错误设备发送正确命令 -- ioctl问题
  • Java的SQL语句执行错误问题
  • 由于扩展配置问题而无法提供您请求的页面错误解决方法
  • 碰到MySQL无法启动1067错误问题解决方法
  • 如此简单的问题,为什么总有错误?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 bad():如果出现错误则返回true
  • Unmounting initrd failed 错误表示什么错误?可能是由什么引起的?系统原来一直运行正常,突然发现系统登陆错误,重启提示以上错误。
  • C++ I/O 成员 fail():如果出现错误则返回true
  • 在inter版solaris 8上编socket程序,在read时遇到错误,错误号14,用strerror()看不到错误描述,请解决,多谢!
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 请问段错误是什么错误啊
  • Mysql查询错误:ERROR:no query specified原因
  • linux安装codeblock 编译错误make: *** [all-recursive] 错误 1
  • windows server2008上PowerBuilder程序系统错误解决方法
  • 求教:文件打包移植错误发生排序错误,小弟努力送分送分啦!59~~~
  • 几个windows平台C++开发错误举例
  • 解决服务器应用程序不可用,错误:0x80070005拒绝访问的错误
  • 安装hadoop时出现内存不够及其它一些常见的hadoop错误解决办法
  • iis8.5显示ASP的详细错误信息500 内部服务器错误解决方法
  • PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
  • http错误404-文件或目录未找到 错误的解决方法
  • linux/centos安装nginx常见错误及解决办法
  • mysql启动错误之mysql启动报1067错误解决方法
  • gnu c++如何得到对于编译错误和运行错误的帮助?
  • 紧急求救:在LINUX下如何根据错误代码,查出对应的错误描述?
  • jsp有没有检查语法错误的东西,难道只能在改完了在服务器上运行然后才能找到错误吗?


  • 站内导航:


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

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

    浙ICP备11055608号-3