m_pConnection这个是个全局变量,
程序的意向是:建立一个全局连接m_pConnection,然后单独记录集m_pRecordset_3,单个释放,只保留连接m_pConnection,
结果:
程序内存泄漏
char chConvertBuffer[60];
string _strPreID = chConvertBuffer1;
//当前时间信息
string _strCurrentTime = chConvertBuffer2;
//更新数据库的语句
string strUpdateSqlEx = "UPDATE puS.dbo." + Name + " SET " + "ID = " + _strCurrentTime;
strUpdateSqlEx += " WHERE ID = " + _strPreID;
//更新数据库的语句
//执行更新语句
try
{
//执行更新
m_pRecordset_3 = m_pConnection->Execute(strUpdateSqlEx.c_str(), &vAffect, adCmdText);
}
catch (_com_error *e)
{
}
//如果更新操作成功
if (vAffect.iVal > 0)
{
}
else
{
}
//关闭数据集
//m_pRecordset_3->Close(); 加上这句程序就出错
m_pRecordset_3.Release();
m_pRecordset_3 = NULL;
//
m_pConnection这个是个全局变量,
程序的意向是:建立一个全部连接m_pConnection,然后单独记录集m_pRecordset_3,单个释放,只保留连接m_pConnection,
结果:
程序内存泄漏
Execute返回的是智能指针,不需要你去创建实例
如果Execute返回的是智能指针,那m_pRecordset_3就可以不用Release(),这个函数是一个捕捉和释放的函数,因为智能指针啥子事情都帮你做了不用多此一举。
看起来想程序走到了catch分支下面,然后m_pRecordset_3里面并没有真实的数据,结果->Close()调用内部指针的时候就出错了