hur.cn - 华软网

 热门搜索

求助 构析函数问题

  作者:未知    来源:网络    更新时间:2011/8/27
我做了一个简单的socket通信程序
定义了一个类来包装消息
大致是这样的
C++">class SimpleData
{
protected:
   int nParam1Size;
   int nParam2Size;
   int nMessageSize;
   char * szParam1;
   char * szParam2;
   char * szMessage;
   char * szTemp;

public:
   SimpleData(char * param1, char * param2....)
   {
     szTemp = NULL;
      szParam1 = new char[size1];
      szParam2 = new char[size2];
      szMessage........
   };
   ~SimpleData()
   {
     if (szTemp != NULL)
         delete [] szTemp;
     delete  [] sz1;
      delete  [] sz2;
     .....
    }
    const char * getBuffer()
   {
     szTemp = new char[totalSize];
    ......format........
     return szTemp;
   }
}

另外在协议类中传递这个类的实例作为参数
sendData(Connection * conn, SimpleData & data)
{
    conn.WriteBytes(data.getBuffer(), data.totalSize);
   conn.flush();
}
问题就出在getBuffer() 方法上
一调用它就会出现内存泄露


基础太差 不知道问题出在哪
求解惑
---华软 网友回答---
用完delete
---华软网友回复---
接收->使用->Delete
你这szTemp获得了多个缓冲区,但是只delete了一次。
---华软网友回复---
同意楼上

const char * getBuffer()
{
     if (NULL != szTemp)
     {
         delete[] szTemp;
         szTemp = NULL;
     }

     szTemp = new char[totalSize];
    ......format........
     return szTemp;
   }

---华软网友回复---
赞同 + 1


另外加一句: 不要返回临时变量的引用及指针


引用 3 楼 jarrylogin 的回复:
同意楼上

const char * getBuffer()
{
     if (NULL != szTemp)
     {
         delete[] szTemp;
         szTemp = NULL;
     }

     szTemp = new char[totalSize];
    ......format........
    ……

---华软网友回复---
  szTemp = new char[totalSize];

  这句放在SimpleData的构造函数当中
---华软网友回复---
引用 2 楼 kk0611113 的回复:
接收->使用->Delete
你这szTemp获得了多个缓冲区,但是只delete了一次。


++      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。