内存泄露,大家帮帮我啊
泄露在BaseDbProxy.cpp中,只有一个new,哭死了
D:\Test\AndonDB\BaseDbProxy.cpp(26) : {80} normal block at 0x00374EF0, 12 bytes long.
Data: < } > E4 7D 04 10 01 00 00 00 E8 0E C7 00
Object dump complete.
The thread 0xD8C has exited with code 2 (0x2).
大家帮帮我啊:
BaseDbProxy.h中的代码------------------------------------------------
#ifndef AFX_BaseDbProxy_H__
#define AFX_BaseDbProxy_H__
#include "LCDbConnection.h"
#define DBFIELD(name) \
res->GetFields()->GetItem(name)->GetValue()
#define DBFIELD1(res, name) \
res->GetFields()->GetItem(name)->GetValue()
#define STRFIELD(name) \
(LPCTSTR)(_bstr_t)DBFIELD(name)
#define STRFIELD1(res, name) \
(LPCTSTR)(_bstr_t)DBFIELD1(res, name)
class AFX_EXT_CLASS CBaseDbProxy
{
public:
//连接数据库
static BOOL Connect();
//关闭数据库
static BOOL Close();
//得到连接对象
static CLCDbConnection * GetConnection();
static ADODB::ADO_LONGPTR GetStrLen(LPCTSTR lpsz)
{
LONG len = 0;
if ( NULL != lpsz)
len = (LONG)_tcslen(lpsz);
#ifdef _UNICODE
len *= 2;
#endif
if (len < 1 )
len = 1; //如果是空字符串确保有结束符
return len;
}
protected:
static CLCDbConnection * m_pDbCon;
static BOOL m_bConnected;
};
#endif
BaseDbProxy.cpp中的代码------------------------------------------------
#include "StdAfx.h"
#include "BaseDbProxy.h"
#include "IniFile.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CLCDbConnection * CBaseDbProxy::m_pDbCon = NULL;
//在同一进程内只有一个连接
BOOL CBaseDbProxy::m_bConnected = FALSE;
CLCDbConnection * CBaseDbProxy::GetConnection()
{
return m_pDbCon;
}
BOOL CBaseDbProxy::Connect()
{
if ( m_bConnected ) //已经连接
return TRUE;
if(m_pDbCon==NULL)
m_pDbCon=new CLCDbConnection();
if ( ! m_pDbCon->IsConnected() )
{
CIniFile Ini;
if ( ! Ini.SetPath(Ini.GetAppPath()+"//dfs.ini"))
{
AfxMessageBox(_T("未找到dfs.ini文件"));
return FALSE;
}
_bstr_t bstrConn = Ini.GetKeyValue("Database", "ConnStr");
//bstrConn += _bstr_t("UID=DFSUSER; PWD=1234;");
if ( ! m_pDbCon->Connect(bstrConn) )
return FALSE;
m_bConnected = TRUE;
}
return TRUE;
}
//关闭数据库连接
BOOL CBaseDbProxy::Close()
{
if ( m_bConnected )
{
if ( m_pDbCon != NULL )
{
if ( m_pDbCon->IsConnected() )
{
BOOL bResult = m_pDbCon->Disconnect();
m_pDbCon->Release();
m_pDbCon = NULL;
return bResult;
}
}
}
return FALSE;
}