我要修改一个数组的长度,就用T *NewElement = new T[MaxSize];
申请了一个新空间,然后把原来数组element的数值赋进去。
最后delete element.再element = NewElement.
那么在析构的时候直接delete []element会有问题吗? 
奇怪的是我在一个程序里面这样写没问题。
但是在另外一个就有问题了,除非屏蔽掉析构。
否则运行错误。
似乎因为最后一次调用的时候已经delete了element,
所以再次析构就有错误。但是element不是已经指向NewElement了吗?

解决方案 »

  1.   

    应该是没有问题的.良好的习惯是
    element =NULL;element = new T[Size];T* NewLement=new T[Size];....
    delete []element;
    element=NewElement;
    ..在析构中
    {
      if(element)
      {
        delete []element;
        element=NULL;
      }
    }
      

  2.   

    如Zark(金陵五月) 说的
    应该没问题呀。
    还有,在VC里。如果T是C++基本的类型,delete 和delete []是一致的。
        如T是类,删除数组必须delete []
      

  3.   

    可能是你的数据越界了,看看你析构函数的element是什么
      

  4.   

    我的析构函数 
    ~LinearList() {delete [] element;}// destructor
    函数体:(抱歉,辛苦大家的眼睛了……)
    template<class T>
    LinearList<T> LinearList<T>::Half()
    {
    if (length == 0) // list is empty
    { return *this; }
    else if (length%2 == 0)  //length is even
    {
    MaxSize = length/2;
    T *NewElement = new T[MaxSize];
    for (int i = 0; i < length; i += 2)
    {
    NewElement[i/2] = element[i];
    }
    delete [] element;
    element = NewElement;
    length = length/2;
    }
    else // length is odd
    {
    MaxSize = length/2 + 1;
    T *NewElement = new T[MaxSize];
    for (int i = 0; i < length; i += 2)
    {
    NewElement[i/2] = element[i];
    }
    NewElement[i-1] = element[i-1]; 
    delete [] element;
    element = NewElement;
    length = length/2 + 1;
    } return *this;
    }
      

  5.   

    ft啊!把LinearList<T> LinearList<T>::Half()
    修改为LinearList<T>& LinearList<T>::Half()
    就没问题了。看来return *this是要返回引用的。
    不管怎么样,谢谢大家!