用ODBC读写EXCEL表格,当m_rSheet->Open(...
异常时,就发生泄漏,大家帮忙看看。这是为什么呢? CDatabase * pDatabase = new CDatabase;
pDatabase->OpenEx(m_sDsn, CDatabase::noOdbcDialog);
CRecordset * m_rSheet = new CRecordset(pDatabase);

// Open Sheet
CString sSql;
sSql.Format("SELECT * FROM [%s$A1:IV65536]", m_sSheetName);
try
{
m_rSheet->Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
}
catch(...)
{ pDatabase->Close();
delete m_rSheet;
m_rSheet = NULL;

delete pDatabase;
pDatabase = NULL;

          }

解决方案 »

  1.   

    这个问题,搞好了。只是不知道是怎么好的。
    具体如下:
    原本内存泄漏的地方,
    m_rSheet->Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
    如果打开失败(原因是查询语句sSql的错误),尽管catch中已经删除了所有new的东东,但还是有泄漏。现在改写成
             TRY
    {
      ......
    }
    CATCH(CDBException,e)
    {
               ......
    }
    END_CATCH;
    就不泄漏了(其他相同都相同)。
    问题是解决了,但具体的原因没有搞清楚,心里郁闷。
    如果有高人知道,还望不吝赐教。