typedef struct
{
double x;
double y;} DXFPOINT;
typedef struct  
{   
DXFPOINT* point;
int n;} DXFPOLYLINE;
typedef CArray <DXFPOLYLINE, DXFPOLYLINE&> CDxfPolyLineArray;
程序中:
void Func1(CDxfPolyLineArray& pLineArray)
{
    DXFPOLYLINE Line;
    Line.point=new DXFPOINT[5];
    pLineArray.Add(Line);
}void Func2()
{
   CDxfPolyLineArray pLineArray;
   Func1(pLineArray);
}
这样,Func2函数结束后,会有内存泄漏
我想让pLineArray销毁时候,Line.point自动释放申请的内存空间,请问该如何解决?不能在Func2中释放,要在Func1中释放,或者在前面定义中释放。
开始本来想将DXFPOLYLINE做成class的,然后利用析构函数来释放,后来发现这样有问题。

解决方案 »

  1.   

    new出来的东西不delete肯定有问题啦
    自己写ConstructElements和DestructElements吧
      

  2.   

    方法一:在Func2返回前
    for(int nIndex = 0; nIndex < pLineArray.GetSize(); ++nIndex)
    {
        delete [] pLineArray[nIndex].point;
    }方法二:在DXFPOLYLINE的析构函数中
    delete [] point;
      

  3.   

    struct DXFPOLYLINE
    {   
    DXFPOINT* point;
    int n;
             DXFPOLYLINE()
             {
                n=0;
                point = NULL;
             }
             ~DXFPOINT()
             {
                if (point)
                delete[] point;
             }
    };
      

  4.   

    好的办法:为DXFPOLYLINE结构增加构造析构函数typedef struct  _DXF
    {   
    DXFPOINT* point;
    int n;
    _DXF()
    {
    point = NULL;
    n = 0;
    }
    ~_DXF()
    {
    if(point != NULL)
    {
    delete point;
    point = NULL;
    }
    }
    } DXFPOLYLINE;