Debug Assertion Failed! 串口数采程序

Debug Assertion Failed! 串口数采程序求助
一个串口数据采集程序,编译通过,运行出错,错误提示:  
  Debug Assertion Failed!  
  Program:..... 
  File: olevar.cpp  
  Line:2553  

  For information on how your program can cause an assertion failure,see....  

File: olevar.cpp为是vc类库里的代码!!!  

程序主要代码如下:

C/C++ code
/***Visual Basic 中的Val()函数改写***/
double CHuoqvjiaoduDlg::Val(CString a)
{
    int number=0;
    CString *p;
    int sum=0;

    for(p=&a;*p!='\0';p++)
    {
        if(*p>='0'&&*p<='9')
        {
            if(number==0)
            {
                sum=(atoi(*p)-48);
                number=1;
            }
            else
                sum=(sum*10+(atoi(*p)-48));
        }
        else
            break;
    }
    return sum;
}


/************主要函数****************/
double CHuoqvjiaoduDlg::readGAM60Value(CString mingling)
{
    int i,j,k;
    //int d;
    CString Buf("  ");
    CString InByte("");
    CString aa("");
    //CString InByte;
    CByteArray OutB;
    //CString aa;
    //CString    bb,cc;
    double value;

    m_MSComm1.SetPortOpen(TRUE);
    m_MSComm1.SetInBufferCount(0);
    m_MSComm1.SetOutBufferCount(0);
    m_MSComm1.SetPortOpen(FALSE);
    //Buf="";
    Buf=mingling;
    Buf.TrimLeft();
    Buf.TrimRight();
    i = strlen(Buf);
    k = 0;
    //free(&OutB);
    //realloc(&OutB,(i/2)+1);
    OutB.RemoveAll();
    OutB.SetSize((i/2)+1);
    j=0;
    while(i>0)
    {
        OutB[j]=atoi(Buf.Mid(k,2));
        k = k + 2;
        i = i - 2;
        j = j + 1;
    }

    /*COleVariant varOut;
    varOut=(COleVariant)OutB; */

    m_MSComm1.SetPortOpen(TRUE);
    m_MSComm1.SetInBufferCount(0);
    //m_MSComm1.SetOutput(varOut);
    //m_MSComm1.SetOutput(COleVariant(OutB));
    /*d = 0;
    while(d<9000000)
        d=d+1;*/
    m_MSComm1.SetOutput(COleVariant(OutB));

    //InByte=(CString)m_MSComm1.GetInput();
    VARIANT   variant_inp;
    COleSafeArray   safearray_inp;
    LONG   len,z=0;
    BYTE   rxdata[2048];
    variant_inp=m_MSComm1.GetInput();
    safearray_inp=(COleSafeArray)variant_inp;
    len=safearray_inp.GetOneDimSize();
    for(z=0;z<len;z++)
        safearray_inp.GetElement(&z,rxdata+z);
    for(z=0;z<len;z++)
    {
        BYTE   bt=*(char*)(rxdata+z);
        InByte.Format("%c",bt);
    }

    m_MSComm1.SetPortOpen(FALSE);

    if((InByte.Mid(1,1)) == "+")
    {
        aa = InByte.Mid(2,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(2,1)) == "+")
    {
        aa = InByte.Mid(3,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(3,1)) == "+")
    {
        aa = InByte.Mid(4,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(4,1)) == "+")
    {
        aa = InByte.Mid(5,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(5,1)) == "+")
    {
        aa = InByte.Mid(6,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(6,1)) == "+")
    {
        aa = InByte.Mid(7,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(7,1)) == "+")
    {
        aa = InByte.Mid(8,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(8,1)) == "+")
    {
        aa = InByte.Mid(9,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(9,1)) == "+")
    {
        aa = InByte.Mid(10,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(10,1)) == "+")
    {
        aa = InByte.Mid(11,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(11,1)) == "+")
    {
        aa = InByte.Mid(12,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(12,1)) == "+")
    {
        aa = InByte.Mid(13,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(13,1)) == "+")
    {
        aa = InByte.Mid(14,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(14,1)) == "+")
    {
        aa = InByte.Mid(15,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(15,1)) == "+")
    {
        aa = InByte.Mid(16,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }

    if((InByte.Mid(16,1)) == "+")
    {
        aa = InByte.Mid(17,10);
        value = Val(aa);
        //return value * 0.01;
        value=value * 0.01;
    }
    return value;
}



void CHuoqvjiaoduDlg::OnButnhq() 
{
    // TODO: Add your control notification handler code here
    double jiaodu;  
    char string[25];
    int sig = 10; // significant digits 

    jiaodu = readGAM60Value("2330300D");

    gcvt(jiaodu, sig, string);
    m_nEdit=string;
    UpdateData(FALSE);
}