本帖最后由 missyou2008bj 于 2011-01-10 23:58:04 编辑

解决方案 »

  1.   

    while(!m_pRecordset1->adoEOF)
    {
    wchar_t * cvfno; //这儿根本就没分配内存
    cvfno = vfno.bstrVal;
    INFO * newnode = new INFO(cvfno);
    infoList.Append(newnode);
    m_pRecordset1->MoveNext();
    }while(!m_pRecordset1->adoEOF)
    {
    //wchar_t * cvfno = new wchar_t(20);
    wchar_t cvfno[20]; //改进:既然是20个wchar不变,还不如在栈上面申请变量
    vfno = m_pRecordset1->GetCollect("fno");
    if(vfno.vt == VT_NULL)
    //cvfno = _T(" "); //错误:这儿把cvfno指针指向了 _T(" ")常量了,失去了对原来分配空间的引用,所以后面delete出错
    cvfno[0] = 0; //把第一个unicode字符设置成0,那么cvfno就是空字符串了
    else  
    {
    //memset(cvfno, 0, 50);
    _tcscpy(cvfno,(wchar_t *)vfno.bstrVal);
    //cvfno = vfno.bstrVal;
    }
    INFO * newnode = new INFO(cvfno);
    infoList.Append(newnode);
    m_pRecordset1->MoveNext();
    delete []cvfno; //cvfno已经指向常量
    }