免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2447 | 回复: 1
打印 上一主题 下一主题

Bus error Coredump [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-03 13:30 |只看该作者 |倒序浏览
我在 Hp unix平台协的程序(B.11.11 U 9000/800)
aCC 编译,程序没有联合体,也没类型转换,处理文件时运行中,出现了这个错误,错误发生时读文件的内容不同。单错误发生的位置都是 226行,
请各位帮帮忙看看。
/********************************
*  查重程序 v0.1
*   XXXXXX
*   
*   
*********************************/
#include <stdio.h>;
#include <string.h>;
#include <stdlib.h>;
#include <stdarg.h>;
#include <sys/time.h>;
#include <stddef.h>;
#include <unistd.h>;

/**********  重单号码检测*************/
struct type_SMT_list{
    char smsSeq[20+1];
    char appDatetime[14+1];
    type_SMT_list *p;
};

struct type_SMT_dub{  
  char phoneNo[6+1];
  type_SMT_list *plist;
  type_SMT_dub  *p;
};

typedef struct{
   type_SMT_dub * p_SMT;
}typeSMT;
/********** 重单号码检测*************/
struct type_SMC_list{  
  char spCode[6+1];
  char thirdDn[11+1];
  char operCode[10+1];
  char appMonth[6+1];
  type_SMC_list *p;
};

struct type_SMC_dub{  
  char phoneNo[6+1];
  type_SMC_list *plist;
  type_SMC_dub  *p;
};

typedef struct{
   type_SMC_dub *p_SMC;
}typeSMC;
//========================================================================
int getTextField(const char *buf,char *Dest,int fn)
{
    int j = 0;

    for (int i =1 ; i<fn ; i++)
    {
        buf = strchr(buf,'|');
        if (buf == NULL)
        {
            return -1;
        }
        buf++;
    }

    while (((*Dest = *buf) != '|') && (*buf !='\0') && (*buf !='\n') )
    {
        Dest++;
        buf++;
    }

    *Dest = '\0';

    return 0;
}
//========================================================================
void initSMTDUB(typeSMT        ** pSMTDUB)
{
    int i;
   
    ( * pSMTDUB ) = new typeSMT[100000];
    if( * pSMTDUB == NULL ) throw "Can't new typeSMT";
   
    for(i=0;i<100000;i++)
    {
        (*pSMTDUB).p_SMT = NULL ;
        /*杜绝“野指针”
        任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。
        所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存
        char *p = NULL;
        char *str = (char *) malloc(100);
        */
    }
}
//========================================================================================
void  delSMTDUB(typeSMT * pSMTDUB)
{
    int i;
    type_SMT_dub * up;
    type_SMT_dub * tup;
    type_SMT_list *oplist;
    type_SMT_list *toplist;
   
    for(i=0;i<100000;i++)
    {
        up = pSMTDUB.p_SMT;
        while( up != NULL )
        {
            oplist = up->;plist;
            while ( oplist != NULL )
            {
                toplist = oplist->;p ;
                delete oplist;
                oplist = toplist;
            }
            tup = up->;p ;
            delete up;
            up = tup;
        }
    }
        
    delete [] pSMTDUB ;
}
//========================================================================
void initSMCDUB(typeSMC   ** pSMCDUB)
{
    int i;
   
    ( * pSMCDUB ) = new typeSMC[100000];
    if( * pSMCDUB == NULL ) throw "Can't new typeSMC";
   
    for(i=0;i<100000;i++)
    {
        (*pSMCDUB).p_SMC = NULL ;
        /*杜绝“野指针”
        任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。
        所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存
        char *p = NULL;
        char *str = (char *) malloc(100);
        */
    }
}
//========================================================================================
void  delSMCDUB(typeSMC * pSMCDUB)
{
    int i;
    type_SMC_dub * up;
    type_SMC_dub * tup;
    type_SMC_list *oplist;
    type_SMC_list *toplist;
   
    for(i=0;i<100000;i++)
    {
        up = pSMCDUB.p_SMC;
        while( up != NULL )
        {
            oplist = up->;plist;
            while ( oplist != NULL )
            {
                toplist = oplist->;p ;
                delete oplist;
                oplist = toplist;
            }
            tup = up->;p ;
            delete up;
            up = tup;
        }
    }
        
    delete [] pSMCDUB ;
}
//=======================================================================
int addToSMT(  type_SMT_dub **pSMT ,char *v_SMS_SEQ,char *v_SERV_NUMBER,char *v_start_date)
{
        type_SMT_dub   **p;
        type_SMT_list  **psmTlist;
        for(p=pSMT;(*p)!=NULL;p=&((*p)->;p))
        {
          if( strncmp((*p)->;phoneNo,v_SERV_NUMBER,6) == 0 )
          {
            
              for(psmTlist=&((*p)->;plist);(*psmTlist)!=NULL;psmTlist=&((*psmTlist)->;p))
              {
                 if(strncmp((*psmTlist)->;smsSeq,v_SMS_SEQ,20) == 0 &&
                    strncmp((*psmTlist)->;appDatetime,v_start_date,14) == 0)
                 {
                     return  1;  //存在重复记录
                 }
              }
              //===========不存在,加上
             (* psmTlist) = new type_SMT_list;
             memset((*psmTlist)->;smsSeq,0,sizeof((*psmTlist)->;smsSeq));
             memcpy((*psmTlist)->;smsSeq,v_SMS_SEQ,20);
             (*psmTlist)->;smsSeq[20] = '\0';
             memset((*psmTlist)->;appDatetime,0,sizeof((*psmTlist)->;appDatetime));
             memcpy((*psmTlist)->;appDatetime,v_start_date,14);
             (*psmTlist)->;appDatetime[14] = '\0';
             (*psmTlist)->;p         = NULL;
              return  0;
           }
         }
        
       (*p) = new type_SMT_dub ;
        memset((*p)->;phoneNo,0,sizeof((*p)->;phoneNo));
        memcpy((*p)->;phoneNo,v_SERV_NUMBER,6);
       (*p)->;phoneNo[6]='\0';
      
        psmTlist=&((*p)->;plist);
        (*psmTlist) = new type_SMT_list;
        
        memset((*psmTlist)->;smsSeq,0,sizeof((*psmTlist)->;smsSeq));
        memcpy((*psmTlist)->;smsSeq,v_SMS_SEQ,20);
        (*psmTlist)->;smsSeq[20] = '\0';
        memset((*psmTlist)->;appDatetime,0,sizeof((*psmTlist)->;appDatetime));
        memcpy((*psmTlist)->;appDatetime,v_start_date,14);
        (*psmTlist)->;appDatetime[14] = '\0';
        (*psmTlist)->;p         = NULL;
        
         return  0;
        
}
//=======================================================================
int addToSMC(  type_SMC_dub **pSMC,char *v_SERV_NUMBER,char *v_SP_CODE,
               char *v_THIRD_DN,char *v_operCode,char *v_month)
{
        type_SMC_dub   **p;
        type_SMC_list  **psmClist;
        for(p=pSMC;  (*p)!=NULL;   p=&((*p)->;p)   )
        {//13782638858   901508  13782638858  "+MCHAT    "   200508
          if( strncmp((*p)->;phoneNo,v_SERV_NUMBER,6) == 0 )
          {
              for(psmClist=&((*p)->;plist);(*psmClist)!=NULL;psmClist=&((*psmClist)->;p))
              {
                 if(strncmp((*psmClist)->;spCode,v_SP_CODE,6) == 0 &&
                    strncmp((*psmClist)->;thirdDn,v_THIRD_DN,11) == 0 &&
                    strncmp((*psmClist)->;operCode,v_operCode,10) == 0 &&
                    strncmp((*psmClist)->;appMonth,v_month,6) == 0  )
                 {
                     return  1;  //存在重复记录
                 }
              }
              //===========不存在,加上
             (* psmClist) = new type_SMC_list;
             memset((*psmClist)->;spCode,0,sizeof((*psmClist)->;spCode));
             memcpy((*psmClist)->;spCode,v_SP_CODE,6);
             (*psmClist)->;spCode[6] = '\0';
             memset((*psmClist)->;thirdDn,0,sizeof((*psmClist)->;thirdDn));
             memcpy((*psmClist)->;thirdDn,v_THIRD_DN,11);
             (*psmClist)->;thirdDn[11] = '\0';
             memset((*psmClist)->;operCode,0,sizeof((*psmClist)->;operCode));
             memcpy((*psmClist)->;operCode,v_operCode,10);
             (*psmClist)->;operCode[10] = '\0';
             memset((*psmClist)->;appMonth,0,sizeof((*psmClist)->;appMonth));
             memcpy((*psmClist)->;appMonth,v_month,6);
             (*psmClist)->;appMonth[6] = '\0';
             (*psmClist)->;p         = NULL;
              return  0;
           }
         }
        
       (*p) = new type_SMC_dub ;
        memset((*p)->;phoneNo,0,sizeof((*p)->;phoneNo));
        memcpy((*p)->;phoneNo,v_SERV_NUMBER,6);
       (*p)->;phoneNo[6]='\0';
      
        psmClist=&((*p)->;plist);
        (* psmClist) = new type_SMC_list;
        memset((*psmClist)->;spCode,0,sizeof((*psmClist)->;spCode));
        memcpy((*psmClist)->;spCode,v_SP_CODE,6);
        (*psmClist)->;spCode[6] = '\0';
        memset((*psmClist)->;thirdDn,0,sizeof((*psmClist)->;thirdDn));
        memcpy((*psmClist)->;thirdDn,v_THIRD_DN,11);
        (*psmClist)->;thirdDn[11] = '\0';
        memset((*psmClist)->;operCode,0,sizeof((*psmClist)->;operCode));
        memcpy((*psmClist)->;operCode,v_operCode,10);
        (*psmClist)->;operCode[10] = '\0';
        memset((*psmClist)->;appMonth,0,sizeof((*psmClist)->;appMonth));
        memcpy((*psmClist)->;appMonth,v_month,6);
        (*psmClist)->;appMonth[6] = '\0';
        (*psmClist)->;p         = NULL;
         return  0;
}               
//========================================================================
int main(int argc,char * argv [])
{
     
    char  inpath[256];
    char  outpath[256];
    char  filename[256];
   
    char  infilename[256];
    char  outfilename[256];
   
    char  SMCfilename[256];
    char  SMTfilename[256];
   
    char  detailSMCfilename[256];
    char  detailSMTfilename[256];
   
    char  buf[1024];
   
    FILE  *fpin;
    FILE  *fpout;
    FILE  *fpsmc;
    FILE  *fpsmt;
    FILE  *fpdetailsmc;
    FILE  *fpdetailsmt;
   
    typeSMT        * pSMTDUB;
    typeSMC        * pSMCDUB;
   
    type_SMT_list  *psmTlist;
    type_SMC_list  *psmClist;
    //================================
    char v_USER_CHRG_TYPE[2+1];
    char v_SERV_NUMBER[11+1];
    char v_SMS_SEQ[20+1];
    char v_APPLY_DATE[8+1];
    char v_APPLY_TIME[6+1];
    char v_start_date[14+1];
    //=============================
    char v_SP_CODE[6+1];
    char v_THIRD_DN[11+1];
    char v_operCode[10+1];
    char v_month[6+1];   
    //===============================
    char tail[10+1];
    int  index =0;
   
    if( argc != 4  )
    {
        printf("Usage: %s INPATH  INFILENAME  OUTPATH\n",argv[0]);
        printf("Examp: %s /home6/MONNET/out/TOBILLDUB 200508TO.R /home6/MONNET/out/TOBILL\n",argv[0]);
        exit(1);         
    }
   
    sprintf(inpath,"%s",argv[1]);
    sprintf(filename,"%s",argv[2]);   
    sprintf(outpath,"%s",argv[3]);

    sprintf(infilename,"%s/%s",inpath,filename);
    sprintf(outfilename,"%s/%s",outpath,filename);
    sprintf(SMCfilename,"%s/SMC_DUB_%s",outpath,filename);
    sprintf(SMTfilename,"%s/SMT_DUB_%s",outpath,filename);
   
    sprintf(detailSMCfilename,"%s/SMC_DETAIL_%s",outpath,filename);
    sprintf(detailSMTfilename,"%s/SMT_DETAIL_%s",outpath,filename);
   
   try
   {   
        initSMTDUB(&pSMTDUB);
        initSMCDUB(&pSMCDUB);
        
        if((fpin=fopen(infilename,"r") == NULL)
        {
           memset(buf,0,sizeof(buf));
           sprintf(buf,"Can't open file %s for read !\n",infilename);
           throw buf;
        }
        
        if((fpout=fopen(outfilename,"w") == NULL)
        {
           memset(buf,0,sizeof(buf));
           sprintf(buf,"Can't open file %s for read !\n",outfilename);
           throw buf;
        }
        //===========================================================
        if((fpsmc=fopen(SMCfilename,"w") == NULL)
        {
           memset(buf,0,sizeof(buf));
           sprintf(buf,"Can't open file %s for read !\n",SMCfilename);
           throw buf;
        }
        if((fpsmt=fopen(SMTfilename,"w") == NULL)
        {
           memset(buf,0,sizeof(buf));
           sprintf(buf,"Can't open file %s for read !\n",SMTfilename);
           throw buf;
        }
        //===========================================================
        if((fpdetailsmc=fopen(detailSMCfilename,"w") == NULL)
        {
           memset(buf,0,sizeof(buf));
           sprintf(buf,"Can't open file %s for read !\n",detailSMCfilename);
           throw buf;
        }
        if((fpdetailsmt=fopen(detailSMTfilename,"w") == NULL)
        {
           memset(buf,0,sizeof(buf));
           sprintf(buf,"Can't open file %s for read !\n",detailSMTfilename);
           throw buf;
        }
        
        
        //=========================================================
        
        
        while(memset(buf,0,sizeof(buf)),fgets(buf,1024,fpin)!=NULL)
        {
            
            
                  memset(v_USER_CHRG_TYPE,0,sizeof(v_USER_CHRG_TYPE));
                  memset(v_SMS_SEQ,0,sizeof(v_SMS_SEQ));
                  memset(v_SERV_NUMBER,0,sizeof(v_SERV_NUMBER));
                  memset(v_APPLY_DATE,0,sizeof(v_APPLY_DATE));
                  memset(v_APPLY_TIME,0,sizeof(v_APPLY_TIME));
                  memset(v_start_date,0,sizeof(v_start_date));
                  //========================================
                  memset(v_SP_CODE,0,sizeof(v_SP_CODE));
                  memset(v_THIRD_DN,0,sizeof(v_THIRD_DN));
                  memset(v_operCode,0,sizeof(v_operCode));
                  memset(v_month,0,sizeof(v_month));
                  //========================================
              getTextField(buf,v_USER_CHRG_TYPE,14); //取计费标志(包月’按条)
              getTextField(buf,v_SERV_NUMBER,9);   //号码
              getTextField(buf,v_APPLY_DATE,24);
              
              memset(tail,0,sizeof(tail));
              memcpy(tail,&v_SERV_NUMBER[6],5); //取号码的后五位
              tail[5]='\0';
              index=atoi(tail);
              
              printf("v_USER_CHRG_TYPE[%s]  v_SERV_NUMBER[%s]\n", v_USER_CHRG_TYPE,v_SERV_NUMBER);
              
              if( strncmp(v_USER_CHRG_TYPE,"02",2) == 0)  //按条
              {
                   getTextField(buf,v_SMS_SEQ,6);   //短消息序列号
                   getTextField(buf,v_APPLY_TIME,25);
                   sprintf(v_start_date,"%s%s",v_APPLY_DATE,v_APPLY_TIME);
                  
                   if( addToSMT(  &(pSMTDUB[index].p_SMT),v_SMS_SEQ,v_SERV_NUMBER,v_start_date)  ==1) //有重复记录
                   {
                        fprintf(fpsmt,"%20s,%11s,%14s\n",v_SMS_SEQ,v_SERV_NUMBER,v_start_date);
                        fprintf(fpdetailsmt,"%s",buf);
                   }
                   else
                       fprintf(fpout,"%s",buf);  
              }
              else
              {
                   getTextField(buf,v_SP_CODE,10);    //  SP_CODE
                   getTextField(buf,v_THIRD_DN,11);   //  第三方号码
                   getTextField(buf,v_operCode,13);    //  业务代码
                   strncpy(v_month,v_APPLY_DATE,6);   //  得到话单的月份
                   v_month[6] ='\0';
                  
                   if( addToSMC(  &(pSMCDUB[index].p_SMC),v_SERV_NUMBER,v_SP_CODE,
                                 v_THIRD_DN,v_operCode,v_month) ==1) //有重复记录
                   {
                        fprintf(fpsmc,"%11s,%6s,%11s,%10s,%6s\n",v_SERV_NUMBER,v_SP_CODE, v_THIRD_DN,v_operCode,v_month);
                        fprintf(fpdetailsmc,"%s",buf);
                   }
                   else
                      fprintf(fpout,"%s",buf);
              }
              
        }
        fclose(fpin);
        fclose(fpout);
        fclose(fpsmc);
        fclose(fpsmt);
        fclose(fpdetailsmc);
        fclose(fpdetailsmt);
        delSMTDUB( pSMTDUB);
        delSMCDUB( pSMCDUB);
  }catch(char * errMsg)
  {
       printf("程序异常中断:\n%s\n,开始释放内存\n",errMsg);
         
       /*释放内存*/
       fclose(fpin);
       fclose(fpout);
       fclose(fpsmc);
       fclose(fpsmt);
       fclose(fpdetailsmc);
       fclose(fpdetailsmt);
       delSMTDUB( pSMTDUB);
       delSMCDUB( pSMCDUB);
       return -1;
  }
  return 0;
}

论坛徽章:
0
2 [报告]
发表于 2005-09-03 14:27 |只看该作者

Bus error Coredump

谢谢了,我自己找到了,是个指针没有初始化
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP