内存泄露,大家帮帮我啊
泄露在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;
}
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;
}
...全文
相关推荐
GDB查找内存泄露
后台程序中经常会存在一部分内存泄露,但是不能很好的定位造成内存泄露的代码,并进行修改,内存泄露不进行修改就会造成程序运行时占用的内存不断升高,逐渐的导致系统的不稳定,现将前一段时间通过GDB调试工具查找内存泄露的方法形成文档以便后续如果发现程序内存泄露能够方便的进行查找修改程序,使程序能够恢复到稳定,健壮运行.
Linux 内存泄露查找
linux 内存泄露排查文档。 介绍mtrace的使用。根据实际问题介绍如果定位问题。
android内存泄露:4、Toast的错误使用导致内存泄露
目录 一、前言 二、Toast的错误使用导致内存泄露 1、新建一个 Module,写主界面 MainActivity,布局 activity_main 2、写业务逻辑 3、效果展示 4、解决方案 一、前言 上篇文章我们介绍了:Handler的错误使用导致内存泄露。详细可参考博文:原创 android内存泄露:3、Handler的错误使用导致内存泄露 ,这篇文章我们将介绍:Toast的错误使用导致内存泄露 二、Toast的错误使用导致内存泄露 我们通常,连续点击按钮多次提示的 Toast,它必须等待前面的 Toast显示完了,后面的才能显示出来。 这可能在某种情境下,不是我们想要的。 假如我们
详解Java内存泄露的示例代码
通过一个Demo来简要介绍下ThreadLocal和ClassLoader导致内存泄露最终OutOfMemory的场景。下面通过示例代码给大家分享Java内存泄露的相关知识,感兴趣的朋友一起看看吧
java内存泄露定位与分析
java内存泄露问题的定位与详细的分析过程



