如果CROOM_DATA 结构里面没有指针指向内存,不用自己释放,函数退出出栈即完成释放结构里面有指针指向内存,而且该内存是由GetOneRoomData 动态分配的调用delete或或者free释放,到底用哪个,取决于GetOneRoomData 是怎么分配的

解决方案 »

  1.   

    CROOM_DATA *pNewData = new CROOM_DATA ; 
      // 为新的实例赋值。     *pRoomData = *pNewData ; 
    delete pRoomData;
      

  2.   

    QQ开发群:73204313
      讨论c/c++,算法,开源,linux/window等
      

  3.   


    就是调用处语法怎么样的,我delete &tRoomData 报错了
      

  4.   

    void Func::RefreshList ()
    {
      CROOM_DATA *tRoomData = NULL;  GetOneRoomData (int nRoomNo, &tRoomData);
        
    if(tRoomData != NULL)
      delete tRoomData;}void GetOneRoomData (int nRoomNo, CROOM_DATA **pRoomData)
    {
      CROOM_DATA *pNewData = new CROOM_DATA ;
      // 为新的实例赋值。    *pRoomData = pNewData ;
      

  5.   

    void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData)
    {
    CROOM_DATA *pNewData = new CROOM_DATA ;
    // 为新的实例赋值。*pRoomData = *pNewData ;
    delete pNewData ;
    }
      

  6.   


    if(tRoomData != NULL) 
      delete tRoomData; 报错的,我定义的tRoomData 是类对象实例,不是普通指针
      

  7.   

    void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData) 

    CROOM_DATA *pNewData = new CROOM_DATA ; 
    // 为新的实例赋值。 *pRoomData = *pNewData ; 
    } 那么我在调用处如何释放这个内存呢? 谢谢 
     
    void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData) 

    CROOM_DATA *pNewData = new CROOM_DATA ; 
    // 为新的实例赋值。 *pRoomData = *pNewData ; 
    delete pNewData ; 
    } 这样是不是我调用处还没用, 你就把那块内存删了呢?
      

  8.   

    调用完了用delete pRoomData;释放
    但LZ你这个函数不行,需要用引用:
    void GetOneRoomData (int nRoomNo, CROOM_DATA *&pRoomData) 
    要不然会内存泄露
      

  9.   


    GetOneRoomData函数中的指针pNewData动态分配然后赋值,再拷贝到pRoomData所指向的RefreshList函数中静态分配的类实例中(这里需要重载operator=,不知楼主有没有做),pNewData的任务就完成了,也就可以释放了void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData) 

      CROOM_DATA *pNewData = new CROOM_DATA ; 
      // 为新的实例赋值。     *pRoomData = *pNewData ; 
        delete pNewData;

    实际上函数RefreshList已经做过静态分配了,函数GetOneRoomData中不需要再做新的分配
      

  10.   

    不好意思,我看错了,*pRoomData = *pNewData是类对象拷贝赋值,不需要引用。11L所说正确