Вставка связанных списков (ядро сброшено)

Мой заголовок и файл имплиментации

#ifndef VIKTOR_H_
#define VIKTOR_H_

#include <iostream>

template <class DataType>
class viktor {

private:
    template <class NodeType>
    struct Node {

        NodeType data;
        Node<NodeType> * next;

    };

    Node<DataType> * backPtr;
    int length;

public:

    viktor();
    ~viktor();

    DataType &operator [] (int) const;

    void push(const DataType &);

    friend std::ostream &operator << (std::ostream &strm, const 
viktor<DataType> &A){

        for(int i = 0; i < A.length; ++i) {

            strm << A[i] << " " << std::flush;
        }

        strm << std::endl;

        return strm;
    }
};
template <class DataType>
viktor<DataType>::viktor() {

backPtr = nullptr;

length = 0;
}
template <class DataType>
viktor<DataType>::~viktor() {

if ( length == 0 ) return;

Node<DataType>* previousPtr = backPtr;
Node<DataType>* nextPtr = backPtr->next;

while( nextPtr != backPtr )
{

    nextPtr = nextPtr->next;

    previousPtr->next = nullptr;
    delete previousPtr;
    length--;

}

backPtr->next = nullptr;
delete backPtr;
}
template <class DataType>
void viktor<DataType>::push(const DataType &item) {

Node<DataType>* newNode = new Node<DataType>;

newNode->data = item;

std::cout << "data: " << newNode->data << std::endl;

if(length != 0) {

    newNode->next = backPtr->next;
    backPtr->next = newNode;
}
else {

    newNode->next = newNode;
}

backPtr = newNode;

length += 1;
//std::cout << "Finished pushing..." << std::endl;
}
template <class DataType>
DataType &viktor<DataType>::operator [] (int i) const {

Node<DataType>* conductor = backPtr;

if (i > length) {

    throw "Item is inaccessible";
}
for (int j = 0; j <= i; ++j) {

        conductor = conductor->next;
}

return conductor->data;
}

#endif //VIKTOR_H_

у меня проблемы с этой функцией

template <class DataType>
void viktor<DataType>::push(const DataType &item) {

Node<DataType>* newNode = new Node<DataType>;

newNode->data = item;

std::cout << "data: " << newNode->data << std::endl;

if(length != 0) {

    newNode->next = backPtr->next;
    backPtr->next = newNode;
}
else {

    newNode->next = newNode;
}

backPtr = newNode;

length += 1;
//std::cout << "Finished pushing..." << std::endl;
}

я использую этот тестовый драйвер

int main() {

viktor<int> blah;

blah.push(2);

std::cout << blah << std::endl;
}

теперь это работает, если я нажму только один раз, но если я сделаю

blah.push(1);
blah.push(2);

он запускает и печатает все данные, которые мне нужны, но в конце программы он выгружает мое ядро ​​(я могу указать конкретную ошибку, если хотите, но это просто карта памяти, а затем aborted (core dumped))

1 ответ

Я починил это! спасибо Некоторые программист чувак! так что проблема была в моем деконструкторе, что я сделал, было изменено previousPtr->next = nullptr; в previousPtr = previousPtr->next;

Другие вопросы по тегам