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;
}
如上面代码,delete Base.pDatabase;这里异常.
连接未打开
State:08003,Native:0,Origin:[Microsoft][ODBC 驱动程序管理器]堆栈信息是这样:
CDatabase::Close() line 378 + 17 bytes
CDatabase::Free() line 417
CDatabase::~CDatabase() line 222
CDatabase::`vector deleting destructor'(unsigned int 1) + 81 bytes
CSearchSql::AddDataBaseThread(void * 0x0013fc1c) line 688 + 54 bytes
_AfxThreadEntry(void * 0x0013f420) line 112 + 13 bytes
_threadstartex(void * 0x00bdb170) line 212 + 13 bytes
KERNEL32! 7c80b713()具体是CDataBase类Close()里面这样一段代码引发的异常: 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
我的CDataBase是自己申请的内存.那么这里应该怎样释放内存呢??