免费注册 查看新帖 |

Chinaunix

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

也是一个Segmentation fault(coredump) 问题,求救大侠 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-20 10:53 |只看该作者 |倒序浏览
我在AIX上写了个ORACLE的C程序,程序执行时报如下错误
time = 20050520
count= 26080


Begin Truncate Table ...
Segmentation fault(coredump)
三张数据表有产生,但系统报错?该如何查这个问题
程序如下:
int main()
{
    int crnDat;
    int capDat;
    char newinf[200];
    long reqType;
    int status,rsplen;
    int sum_txrsts;
    int sum_txnsts;
    long trcno2;
    int count_delete;
    char txndat_delete[11];
    char time[15];
    char errMsg[1024];
    int count_trcno2_twntn2;
    short ind[20];
    int count;
    int i;
    int j=0;
    char    timeStr[20];
    char    TimeStr[9];
    char    TimeDat[11];
     
        i=0;
    if ( ConnectToOracle()==-1 )
    {
        puts("ERROR:Server atx_log can not connect to oracle.";
        exit( -1 );
    }
   
        GetSysTime(timeStr);
        memcpy(TimeStr,timeStr,;
        memcpy(TimeDat,TimeStr,;
       
        strcpy(TimeDat,"20050520",;
        printf(" time = %s\n",TimeDat);
         if (ProcessRP7011(TimeDat)< 0)
          printf("7011报表产生错误\n";
        else
          printf("7011报表产生成功\n";
         

         return 0;

}
int ProcessRP7011(char *TimeDat)         
{  
    BcsmDef  *prline;
    RsfAcc   *prhead1,*prhead2;
    FILE *bankfile;
    char   filename[50];
    int  j=0;
     int status;
     int Bamt,Samt;
     char  Bcuu[3];
     char  Bchar[3];
     char  Scuu[3];
     char  Schar[3];

     char  Iacc1[23];
     char  Iacc2[23];
     char  Itermid[10];
     char  Itellno1[3];
     char  Itellno2[3];
     char  Isup1[3];
     char  Isup2[3];
     char  Itime1[7];
     char  Itime2[7];
     char  Itxncode1[5];
     char  Itxncode2[5];
     char  Idb1[2];
     char  Idb2[2];
     float Iamt;
     char  Imemo1[6];
     char  Imemo2[6];
     char  Iidno1[20];
     char  Iidno2[20];
     char  Iname1[21];
     char  Iname2[21];
     char  Icuu1[3];
     char  Icuu2[3];
     
     char  oldbank[8];
     char  Ibank[8];

   
        memset(oldbank,' ',;
        oldbank[7]='\0';
     sprintf(filename,"/collate/7011.%8s",TimeDat);
     printf("\n get bank data  filename=%s\n",filename);
        if((bankfile=fopen(filename,"w")==NULL)
           {
            printf("\nCan't Open the bank output file !";
            return -1;
           }
        
  
  TruncateTable();
  EXEC SQL WHENEVER SQLERROR goto sqlerror_err;
  EXEC SQL COMMIT;
  EXEC SQL INSERT INTO RP11A  SELECT * FROM RSFHSSM where ( txncode='1610' or txncode='1100' or txncode='3510' ) and memo like '%2%';
  EXEC SQL COMMIT;
  EXEC SQL INSERT INTO RP11B  SELECT * FROM RSFHSSM where memo like '%2%' and (txncode='1200'or txncode='1620' or txncode='3590' or txncode='3591');
  EXEC SQL COMMIT;
  EXEC SQL INSERT INTO RP11C ( ACC1,ACC2,TERM1,TELL1,TELL2,SUP1,SUP2,TIME1,TIME2,TXNCODE1,TXNCODE2,DB1,DB2,AMT,MEMO1,MEMO2,ID1,ID2,NAME1,NAME2,CUU1,CUU2)
                            select A.ACCOUNTNUMBERDATE,B.ACCOUNTNUMBERDATE,A.TERMID,A.TELLERNO,B.TELLERNO,A.SUPNO,B.SUPNO,A.TXNTIME,B.TXNTIME,A.TXNCODE,B.TXNCODE,A.DB,B.DB,A.TXNAMT,A.MEMO,B.MEMO,A.IDNOCODE,B.IDNOCODE,A.NAME,B.NAME,A.CUU,B.CUU
                            FROM rp11a a,rp11b b where( A.TXNAMT=B.TXNAMT ) AND (SUBSTR(A.TERMID,1,7)=SUBSTR(B.TERMID,1,7)) and (SUBSTR(A.NAME,1,5) != SUBSTR(B.NAME,1,5));
  EXEC SQL COMMIT;

                               
   EXEC SQL DECLARE c_ejt7011 CURSOR FOR
                         SELECT  nvl(ACC1,' '),
                                 nvl(ACC2,' '),
                                 nvl(SUBSTR(TERM1,1,7),' '),
                                 nvl(TELL1,' '),
                                 nvl(TELL2,' '),
                                 nvl(SUP1,' '),
                                 nvl(SUP2,' '),
                                 nvl(TIME1,' '),
                                 nvl(TIME2,' '),
                                 nvl(TXNCODE1,' '),
                                 nvl(TXNCODE2,' '),
                                 nvl(DB1,' '),
                                 nvl(DB2,' '),
                                 nvl(AMT,0),
                                 nvl(MEMO1,' '),
                                 nvl(MEMO2,' '),
                                 nvl(ID1,' '),
                                 nvl(ID2,' '),
                                 nvl(NAME1,' '),
                                 nvl(NAME2,' '),
                                 nvl(CUU1,' '),
                                 nvl(CUU2,' ')
                                 FROM RP11C
                                 order by term1;
                                                                                     
      EXEC SQL OPEN c_ejt7011;
   
        while(sqlca.sqlcode ==0)
                 {
                         EXEC SQL FETCH  c_ejt7011
                        INTO :Iacc1,  
                             :Iacc2,
                             :Itermid,
                             :Itellno1,
                             :Itellno2,
                             :Isup1,
                             :Isup2,
                             :Itime1,
                             :Itime2,
                             :Itxncode1,
                             :Itxncode2,
                             :Idb1,
                             :Idb2,
                             :Iamt,
                             :Imemo1,
                             :Imemo2,
                             :Iidno1,
                             :Iidno2,
                             :Iname1,
                             :Iname2,
                             :Icuu1,
                             :Icuu2;
               if (sqlca.sqlcode ==1403)break;               
                    fprintf(bankfile,"name1=   %s n,ame2  %s
                    \n",Iname1,Iname2);                                       
            printf("sql= %d,j= %d\n",sqlca.sqlcode,j);
        }
     fclose(bankfile);
     
  EXEC SQL CLOSE c_ejt7011;
  EXEC SQL COMMIT ;
  return 1;
  sqlerror_err:
        EXEC SQL COMMIT ;
        printf("SQLERROR1: %s\n",sqlca.sqlerrm.sqlerrmc);
        EXEC SQL CLOSE c_ejt7011;
        return -1;
       
}
int TruncateTable( )
{

       printf("Begin Truncate Table ...\n";


        EXEC SQL TRUNCATE TABLE        RP11A;
        if(sqlca.sqlcode!=0)
                {
                        printf("Truncate table RP11A error !\n";
                }
        EXEC SQL TRUNCATE TABLE        RP11B;
                if(sqlca.sqlcode!=0)
                {
                        printf("Truncate table RP11B error !\n";
                }
        EXEC SQL TRUNCATE TABLE        RP11C;
                if(sqlca.sqlcode!=0)
                {
                        printf("Truncate table RP11C error !\n";
                }
sqlerror_err:
        EXEC SQL COMMIT;
        return -1;
       
        }

论坛徽章:
0
2 [报告]
发表于 2005-11-18 12:00 |只看该作者

re

strcpy造成缓冲区溢出

论坛徽章:
0
3 [报告]
发表于 2005-11-18 12:31 |只看该作者
你的begin tran在那里?

论坛徽章:
0
4 [报告]
发表于 2005-11-18 13:03 |只看该作者
strcpy能用三个参数吗?
memcpy才是三个吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP