各位达人,我在进入现场后发现才发现了我程序出现内存泄漏,已经花了很长时间不能解决,希望大家给些意见,谢谢了!我跟踪了很久,发现在用ADO读取SQL Server数据库字段时发生了内存泄漏,程序的框架如下,请各位指点:
   我采用线程处理接收数据,过程如下:
   一、启动线程
        pThread=AfxBeginThread(DataRecCheckThread,this);
   二、UINT DataRecCheckThread(LPVOID lParam)
       {
           省略...
      pro.DealUDPDelivery(msgrecv.msg,(DWORD)DataLen);//处理接收数据
           省略...
          return 0;
        }   三、//接收数据
     void CProtoColMenager::DealUDPDelivery(char* buff, DWORD nLen)
     {
         省略...

         DealwithDB=new CDealwithDB();
DealwithDB->GetSimFrmDb2(str,RtuNo);  //从数据库中读取数据字段
delete DealwithDB;

         省略...
return;
      }
 四、
void CDealwithDB::GetSimFrmDb2(CString & tmp_sim,char * RtuNo)
{
CRecordSet* pRecordSet;
char tmp[50]="select sim_num from f_rtubase where rtu_nm =\'";
strcat(tmp, RtuNo);
strcat(tmp,"\'");
pRecordSet=myAdo.CreateRecordSet(tmp);
if(!pRecordSet)
{
pView->PrintInfo("打开数据库失败!",1);
myAdo.DestroyRecordSet(pRecordSet);
}
          pRecordSet->GetColVar(&tmp_sim,(int)0);
                                        //一加上这句话后如果接收数据,内存大幅度增加!
          tmp_sim.TrimRight();          myAdo.DestroyRecordSet(pRecordSet);
 }五、如上所示,如果调用以下函数,接收数据时,内存大幅度泄漏!
BOOL CRecordSet::GetColVar(CString *pStr, int index)
{
VARIANT v;
BOOL rec=GetColValue(&v,index);
*pStr=v.bstrVal;
return rec;
}六、BOOL CRecordSet::GetColValue(VARIANT *pv, int id)
{
Fields* pFields;
Field* pField;

VARIANT vitem;
vitem.vt = VT_I1;
vitem.bVal = id;
HRESULT hr;
try{
hr=m_pRecordSet->get_Fields(&pFields);
hr=pFields->get_Item(vitem,&pField);
hr=pField->get_Value(pv);
}catch (_com_error& e) 
{
dump_com_error(e);
return -1;
}
return hr;
}请高手给予指点 ,一定送分到底。