/// 如果这样调用可能会有内存泄漏 dbManager * pMP = GetPubDBManager(DictDb);
 CADORecordSet rs;
 CAdoConnection * pConnP = pMP->GetDbConnect();
 //取得数据源
 rs.SetAdoConnection(pConnP);不知道大家看出问题了没有,如何改正???

解决方案 »

  1.   

    1.到底有没有内存泄露?LZ怎么知道有内存泄露的?通过工具吗?
    2.dbManager没有看到定义。
      

  2.   

    我用程序运行啊
    dbManager 是一个管理数据库的对象
    dbManager * Exe::GetPubDBManager(DBType type)
    {
    switch(type)
    {
    case WorkDb:
    return &m_Pub_WorkDb;
    break;
    case DictDb:
    return  &m_Pub_DictDb;
    break;
    case NewsDb:
    return  &m_Pub_NewsDb;
    break;
    case DataDb1:
    return  &m_Pub_DataDb1;
    break;
    case DataDb2:
    return  &m_Pub_DataDb2;
    break;
    case DataDb3:
    return  &m_Pub_DataDb3;
    break;
    case DataDb4:
    return  &m_Pub_DataDb4;
    break;
    case BbsDb:
    return  &m_Pub_BbsDb;
    break;
    default:
    return NULL;
    break;
    }
    }CAdoConnection * dbManager::GetDbConnect()
    {
    //没有连接,则打开.
    if(!m_ConnDb.IsOpen())
    {
    OpenDB();
    } if(m_ConnDb.IsOpen()==TRUE && GetState()==DBSTATE_NORMAL )
    {
    return &m_ConnDb;
    }
    else
    {
    return NULL;
    }

    }
      

  3.   

    如果链接不是你这里管.内存泄露没看见.  但至少这样写吧.
    /// 如果这样调用可能会有内存泄漏 dbManager * pMP = GetPubDBManager(DictDb);
    if(pMP != NULL){
       CADORecordSet rs;
       CAdoConnection * pConnP = pMP->GetDbConnect();
       //取得数据源
       rs.SetAdoConnection(pConnP);
    }
      

  4.   

    怎么说呢?我打一个简单的比方,就好像字符串类的分配:char *MyString::SetPointer(char *NewPointer)
    {
       // 这里只是一个简单的设置新指向,之前的指针成为野指针,所指向的内存没有释放
       m_pPointer = new char[strlen(NewPointer) + 1];
    }MyString::MyString(const char *Content)
    {
      m_pPointer = new char[strlen(Content) + 1];
    }
      

  5.   

    可是你的代码里面并没有这样的结构啊,Connection的创建和删除并不需要他来做,他只是一个指针指向。跟你上面的例子不一样的。