получение SIGSEGV (ошибка сегментации) - PullRequest
0 голосов
/ 10 апреля 2020

Я создаю стандартную c коробку с шаблоном. В основном что-то вроде очереди или связанного списка. Я продолжаю получать SIGSEGV по некоторым причинам, и я не могу понять это. Я беру целое число или строку от пользователя в main, а затем конструктор выделяет память для существующего ящика generi c, а затем использует функцию inert_First (есть намного больше функций, таких как insert_Mid, insert_last, delete_Mid et c) и мне все время говорят, что у меня неправильная память, но я не знаю где?

это класс

template<class T>
class g_Box
{
    int first,mid,last;
    int no_Of_Ele;
    int capacity;
    T *ele;
public:

    g_Box();
    g_Box(int);
    void insert_First(T);
};

это конструктор


template<class T>
g_Box<T>::g_Box(){
    first=-1, last=-1, mid=-1;
    no_Of_Ele=0;
    capacity=10;
    T *ele = new T[capacity];
}

template<class T>
g_Box<T>::g_Box(int a){
    first=-1, last=-1, mid=-1;
    no_Of_Ele=0;
    capacity=a;
    T *ele = new T[capacity];
}

Это insert_First


template<class T>
void g_Box<T>::insert_First(T a){
    if(isFull()){
        cout<<"The box is full";
    }
    else if(isEmpty()){
        first=0; last=0; mid=(first+last)/2;
        ele[0]=a;
        no_Of_Ele++;
    }
    else{
        T *ele2 = new T[capacity];
        //T ele2[capacity];
        for(int i=0; i<no_Of_Ele; i++){
            ele2[i]=ele[i];
        }
        for(int i=0; i<no_Of_Ele; i++){
            ele[i+1]=ele2[i];
        }
        ele[first]=a;
        last++;
        mid=(first+last)/2;
        no_Of_Ele++;
        delete[] ele2;
    }
}

и это главный


int main()
{
    g_Box<int> g;
    int data;
    cin>>data
    g.insert_First(data);
}



...