struct  line_stru
{
 int   line_num; 
 float *line_point;
};line_stru drw_line;CList <line_stru  ,line_stru > drw_line1;
先分配空间
line_num=30;
drw_line.line_point=new float [line_nmu*2];
drw_line1.AddTail(drw_line) ;
.....
不用delete [] drw_line.line_point释放空间
可不可以用下面的方法释放line.point所占用的空间
drw_line1.RemoveAll();

解决方案 »

  1.   

    会有内存泄漏。先释放空间再RemoveAll。
      

  2.   

    添加构造析构函数,处理内存释放
    struct  line_stru
    {
     int   line_num; 
     float *line_point;
    line_stru()
    {
        line_point = 0;
    }
    ~line_stru()
    {
        delete []line_point;
    }
    };
    line_stru drw_line;
      

  3.   

    new的数组对应的delete[]
    然后RemoveAll
      

  4.   

    我的目的,是不是可以先不用释放直接用drw_line1.RemoveAll()进行释放,一定要用
    delete [] drw_line.line_point释放吗? 那drw_line1.RemoveAll()做什么用.
      

  5.   

    int i,num;
       POSITION ik=NULL;
       num=drw_line1.GetCount(); 
       ik=drw_line1.GetHeadPosition();
       try
       {
       for(i=0;i<num;i++)
       {
           ik=drw_line1.FindIndex(i);
           drw_line=drw_line1.GetAt(ik);
           delete drw_line.line_point;
           drw_line1.RemoveAt(ik);
        }
    运行出错,怎么回事
      

  6.   

    RemoveAll()是清除列表中所有元素,但不会释放new申请的空间,这个一定要用delete来的,自己在析构函数中用如下这样的代码释放:
    struct  line_stru
    {
     int   line_num; 
     float *line_point;
     ~line_stru();
    };line_stru drw_line;line_stru::~line_stru()
    {
    if (line_point)
      delete []line_point;
      line_point=NULL;
    }
      

  7.   

    new申请的空间必须delete用来释放