为什么delete cdatabase会发生异常呢?
Base.pDatabase=new CDatabase;//这里申请的内存
...//一些其他的代码
try
{
TRACE1("\n%s",ConnStr);
int ret = Base.pDatabase->OpenEx(ConnStr,CDatabase::noOdbcDialog);//判断连接
((CSearchSql*)Ptr)->m_pTmpConnect=NULL;
TRACE1("\npDatabase->OpenEx return value=%d",ret);
}
catch(...)
{
((CSearchSql*)Ptr)->m_bThreadState=THREADEXIT;
((CSearchSql*)Ptr)->m_Err=_T("OpenEx exception.");
delete Base.pDatabase;//Exception
//First-chance exception in ScriptTool.exe (ODBC32.DLL): 0xC0000005: Access Violation.First-chance exception in ScriptTool.exe (ODBC32.DLL): 0xC0000005: Access Violation.
((CSearchSql*)Ptr)->m_pTmpConnect=NULL;
return -1;
}
TRY
{
while (!m_listRecordsets.IsEmpty())
{
CRecordset* pSet = (CRecordset*)m_listRecordsets.GetHead();
pSet->Close(); // will implicitly remove from list
pSet->m_pDatabase = NULL;
}
}
CATCH_ALL(e)
{
AfxUnlockGlobals(CRIT_ODBC);
THROW_LAST();
}
END_CATCH_ALL