如题,VC用debug可以运行,release就显示内存不能“read”,好几天了,把这段代码删除了就可以release运行,求求大虾们帮帮忙...
try
{
m_pConnection.CreateInstance("ADODB.Connection");  
_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
uid=;pwd=;DBQ=Data.mdb;";
m_pConnection->Open(strConnect,"","",adModeUnknown); 
}
catch (_com_error e)
{
AfxMessageBox(e.Description()); 
} giv_GroupNum = 0;
CString sql = "select * from GROUPLIST";
m_pRecordset.CreateInstance(__uuidof(Recordset)); 
m_pRecordset->Open(_bstr_t(sql), m_pConnection.GetInterfacePtr(),
    adOpenDynamic, adLockOptimistic, adCmdText); 


CString strGroupNum;
while (!m_pRecordset->adoEOF)
{
giv_GroupNum++;
int GroupNum = giv_GroupNum;
if (giv_GroupNum<10)
{
strGroupNum.Format("%d%d",0,GroupNum);

else
{
strGroupNum.Format("%d",GroupNum);
} m_List3.InsertItem(GroupNum-1,strGroupNum);
m_List3.SetItemText(GroupNum-1,1,(char*)(_bstr_t)m_pRecordset->GetCollect("GroupName"));
m_List3.SetItemText(GroupNum-1,2,(char*)(_bstr_t)m_pRecordset->GetCollect("GroupNum"));
m_List3.SetItemText(GroupNum-1,3,(char*)(_bstr_t)m_pRecordset->GetCollect("车"));
strTreeGroupName = (char*)(_bstr_t)m_pRecordset->GetCollect("GroupName");
        strTreeGroupNum = (char*)(_bstr_t)m_pRecordset->GetCollect("GroupNum");
::SendMessage(m_pUserGroupWnd,WM_SetParentTreeList,0,0);//·¢ËÍÏûÏ¢µ½UserGroup
m_pRecordset->MoveNext();
}
m_pRecordset->Close();   
CString sqlUSER = "select * from USERLIST";
int UserNum =0;
_variant_t var;
CString strUSERNum;
int j=0;

for (int i=0;i<giv_GroupNum;i++)
{
m_pRecordset.CreateInstance(__uuidof(Recordset)); 
m_pRecordset->Open(_bstr_t(sqlUSER), m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText); 
while (!m_pRecordset->adoEOF)
{
var = (_bstr_t)m_pRecordset->GetCollect("GroupName");
if(var.vt != VT_NULL)
strGroupName = (LPCSTR)_bstr_t(var);

if (strGroupName == m_List3.GetItemText(j,1))
{
UserNum++;
if (UserNum<10)
{
strUSERNum.Format("%d%d",0,UserNum);

else
{
strUSERNum.Format("%d",UserNum);
}
m_List2.InsertItem(UserNum-1,strUSERNum);
m_List2.SetItemText(UserNum-1,1,(char*)(_bstr_t)m_pRecordset->GetCollect("Name"));
m_List2.SetItemText(UserNum-1,2,(char*)(_bstr_t)m_pRecordset->GetCollect("Number"));
m_List2.SetItemText(UserNum-1,3,(char*)(_bstr_t)m_pRecordset->GetCollect("GroupName"));
m_List2.SetItemText(UserNum-1,4,(char*)(_bstr_t)m_pRecordset->GetCollect("³µÅƺÅ"));
m_List2.SetItemText(UserNum-1,5,(char*)(_bstr_t)m_pRecordset->GetCollect("ÊÖ»úºÅ"));
m_List2.SetItemText(UserNum-1,6,(char*)(_bstr_t)m_pRecordset->GetCollect("±¸×¢"));
strTreeUserName = (char*)(_bstr_t)m_pRecordset->GetCollect("Name");
strTreeGroupName = (char*)(_bstr_t)m_pRecordset->GetCollect("GroupName");
strTreeUserNum = (char*)(_bstr_t)m_pRecordset->GetCollect("Number");
::SendMessage(m_pUserOnlinehWnd,WM_SetTreeUserItem,0,0);
}
m_pRecordset->MoveNext();
}
j++;

}
m_pRecordset->Close();

解决方案 »

  1.   

    两种模式下语法都没有错,但是运行时就出错,就显示内存不能“read”,在配置好的电脑上可以运行,急死我啦
      

  2.   

    在程序的某处加AfxMessageBox()标志,看他能执行到哪里,,之前我也遇到这种情况,我的情况是有一个变量未初始化
      

  3.   

    Releae下设置调试模式 然后调试运行
      

  4.   

    使用带 debug 信息的 release 版本进行运行
      

  5.   

    m_pRecordset也加try和catch,可能是m_pRecordset建立失败或打开失败,所以往下执行时就会出错,你可以把断点设在这句,看看m_pRecordset是不是有效
      

  6.   

    vc 项目  链接  多线程 md
      

  7.   

    与m_pRecordset有关的操作全都加上try catch
      

  8.   

    每个m_pRecordset->GetCollect的返回都有必要判断是否是空值:_variant_t var=m_pRecordset->GetCollect(...)if(var.vt == VT_NULL)
    {
    ...
    }
    else
    {
    ...
    }