Двусвязные списки, найти ошибку в коде

Помогите найти ошибку в коде, двусвязные списки. Программа работает, но выскакивает ошибка на деструкторе, в котором прописано удаление списка, не могу понять в чем ошибка, помогите пожалуйста.
#include<iostream>
#include<time.h>
using namespace std;
 
template <typename T>
struct Elem
{
   T *mass;
   int ramzer;
   int size;
   int grow;
   Elem * next, * prev;
};
template <typename T>
class Array
{
   Elem<T> * Head, * Hvost;
   int count;
   int grow;
   int size;
public:
   Array();
   ~Array();
   void ShowAll();
   void DellSpis();
   void AddHead();
   void AddHvost();
   void SetSize(int size, int grow);
};
template<typename T>
Array<T>::Array()
{
    Elem<T> *temp=new Elem<T>;
    Head=Hvost=NULL;
    count=0;
    grow=1;
    size=0;
}
template<typename T>
Array<T>::~Array()
{
    while(count!=0)
    {
        DellSpis();
            count--;
    }
}
template<typename T>
void Array<T>::DellSpis()
{
    Elem<T> *temp=Head;
    Elem<T> *pDel=temp->prev;
    Elem<T> *aDel=temp->next;
    if(pDel!=0&&count!=1)
        pDel=aDel;
    if(aDel!=0&&count!=1)
        aDel=pDel;
    Head=aDel;
    delete[]temp->mass;
    delete temp;
 
}
template<typename T>
void Array<T>::AddHead()
{
    Elem<T> *temp=new Elem<T>;
    temp->grow=grow;
    temp->size=size;
    temp->mass=new T[temp->grow];
    temp->prev=0;
    for(int i=0;i<size;i++)
        temp->mass[i]=rand()%20;
    temp->next = Head;
    if(Head != 0)
      Head->prev = temp;
    if(count==0)
        Head=Hvost=temp;
    Hvost=temp;
    count++;
}
template<typename T>
void Array<T>::AddHvost()
{
    Elem<T> *temp=new Elem<T>;
    temp->grow=grow;
    temp->size=size;
    temp->mass=new T[temp->grow];
    temp->next=0;
    temp->prev=Hvost;
    for(int i=0;i<size;i++)
        temp->mass[i]=rand()%20;
    if(Hvost != 0)
      Hvost->next = temp;
    if(count==0)
        Head=Hvost=temp;
    Hvost=temp;
    count++;
}
template<typename T>
void Array<T>::ShowAll()
{
    Elem<T> *temp=new Elem<T>;
    temp=Head;
    while(temp!=0)
    {
    for(int i=0;i<temp->size;i++)
        cout<<temp->mass[i]<<" ";
        cout<<endl;
        temp=temp->next;
    }
 
 
}
template<typename T>
void Array<T>::SetSize(int size, int grow)
{
    this->size=size;
    while(size>grow){
        grow+=5;
    }
    this->grow=grow;
}
void main()
{
    setlocale(LC_CTYPE,"Rus");
    Array <int> List;
    List.SetSize(5,10);
    for(int i=0;i<5;i++)
        List.AddHvost();
    List.ShowAll();
}
кто нибудь помогите найти ошибки в коде, пожалуйстапробовал так:
template<typename T>
void Array<T>::DellSpis()
{
    Elem<T> *temp=Head;
    Head=temp->next;
    delete[]temp->mass;
    delete temp;
}
та же ошибка вылазитпо дебагеру вылетает ошибка в этой строке:
delete[]temp->mass;
2 ответа

Первый вариант у меня там-же вылетает, а вот вариант с
template<typename T>
void Array<T>::DellSpis()
{
        Elem<T> *temp=Head;
        Head=temp->next;
        delete[]temp->mass;
        delete temp;
}
работает отлично. Возможно поможет пересборка с очисткой. Компилировал я, кстати, g++, для чего void main менял на int main и подключал stdlib.h


Hypafrag, второй раз мне советуют такой вариант, но он почему то не работает, не пойму почемупроблема оказалась в другом методе класса, вопрос закрыт всем спасибо!