大致情况: MFC编程 ,通过 occi接口连接Oracle数据库,执行SQL语句;在 Debug模式下程序运行正常,可以正常连接数据库,在Release模式下则报错。报错信息如下:>>Error message:Unhandled exception at 0x61f00414 in sqla.exe: 0xC0000005: Access violation reading location 0x00006d65.>>Breakpoint at mlock.c:/***
* _unlock - Release multi-thread lock
*
*Purpose:
* Note that it is legal for a thread to aquire _EXIT_LOCK1
* multiple times.
*
*Entry:
* locknum = number of the lock to release
*
*Exit:
*
*Exceptions:
*
*******************************************************************************/void __cdecl _unlock (
int locknum
)
{
/*
* leave the critical section.
*/
LeaveCriticalSection( _locktable[locknum].lock );
}
想请问一下,这个报错的原因是什么?
如何解决呢?报错部位的代码:
BOOL CCOMPDlg::SnapListCtrlShow() 

        //TODO: 
        m_SNAPID.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES);         m_SNAPID.InsertColumn(0, "", LVCFMT_CENTER, 30); 
        m_SNAPID.InsertColumn(1, "Snap id", LVCFMT_CENTER, 100); 
        m_SNAPID.InsertColumn(2, "Instance", LVCFMT_CENTER, 90); 
        m_SNAPID.InsertColumn(3, "DB Name", LVCFMT_CENTER, 90); 
        m_SNAPID.InsertColumn(4, "Snap Level", LVCFMT_CENTER, 100);         std::string szSQL, szDBNAME, szINSTANCE; 
        CString szSNAPID, szSNAPLEVEL; 
        int rowIndex = 0;         Environment *pENV; 
        Connection *pCONN; 
        Statement *pSTAT; 
        ResultSet *pRS;         
        pENV = Environment::createEnvironment();         //报错位置 
        pCONN = pENV->createConnection("system", "system123", "//127.0.0.1:1521/hawking"); 
        pSTAT = pCONN->createStatement(); 
        szSQL = "select s.snap_id snap_id"\ 
                        ", to_char(s.end_interval_time,'dd Mon YYYY HH24:mi') snapdat"\ 
                        ", di.instance_name    inst_name"\ 
                        ", di.db_name             db_name"\ 
                        ", s.snap_level             lvl "\ 
                        "from dba_hist_snapshot s"\ 
                        ", dba_hist_database_instance di "\ 
                        "where di.dbid = s.dbid "\ 
                        "and di.instance_number = s.instance_number "\ 
                        "and di.startup_time = s.startup_time "\ 
                        "order by db_name, instance_name, snap_id"; 
        pSTAT->setSQL(szSQL);         try 
        { 
                //TODO: 
                pRS = pSTAT->executeQuery(); 
                while(pRS->next()) 
                { 
                        szSNAPID.Format("%d", pRS->getInt(1)); 
                        szDBNAME = pRS->getString(3); 
                        szINSTANCE = pRS->getString(4); 
                        szSNAPLEVEL.Format("%d", pRS->getInt(5));                         m_SNAPID.InsertItem(rowIndex, ""); 
                        m_SNAPID.SetItemText(rowIndex, 1, (LPCTSTR)szSNAPID); 
                        m_SNAPID.SetItemText(rowIndex, 2, szINSTANCE.c_str()); 
                        m_SNAPID.SetItemText(rowIndex, 3, szDBNAME.c_str()); 
                        m_SNAPID.SetItemText(rowIndex, 4, (LPCTSTR)szSNAPLEVEL); 
                        
                        rowIndex++; 
                }         
                pSTAT->closeResultSet(pRS); 
                pCONN->terminateStatement(pSTAT); 
        } 
        catch(SQLException &e) 
        { 
                //TODO: 
                ::MessageBox(NULL, "Error: \r\n    获取Snap id信息失败,请手动填写!", "错误提示", MB_OK); 
                ::MessageBox(NULL, (LPCSTR)e.getMessage().c_str(), "错误提示", MB_OK); 
                if (pCONN != NULL) 
                                pENV->terminateConnection(pCONN); 
                if (pENV != NULL) 
                                Environment::terminateEnvironment(pENV);                 return FALSE; 
        }         pENV->terminateConnection(pCONN); 
        Environment::terminateEnvironment(pENV);         return TRUE; 
}
oracledebugreleaseexception