C++ Pop Function Связанный список

Я пишу программу, которая реализует стеки как связанные списки. Программа соответствует, но когда я запускаю ее, она падает. Я запустил отладчик и выдает необработанное исключение, когда оно попадает внутрь функции Pop() и в строку "topPtr = topPtr->next". Мне было интересно, если кто-то заметил там что-то, что вызывает эту ошибку. Я добавил часть main и функцию pop, которая, по моему мнению, на меня повлияла. Спасибо

template<class ItemType>
struct NodeType
{ 
   ItemType info;
   NodeType* next;
};

template<class ItemType>
class Stack
{ 
private:
   int stacklength;
   NodeType<ItemType>* topPtr; // It points to a singly-linked list
public: 
    void Pop(ItemType &x);

template<class ItemType>
void Stack<ItemType>::Pop(ItemType &x)
{
    NodeType<ItemType>* tempPtr;
    tempPtr = topPtr;
    topPtr = topPtr->next;
    delete tempPtr;
    stacklength--;
}

int main()
{
Stack <int> IntStack;
int x;
IntStack.Pop(x);
}

1 ответ

Во-первых, вы не инициализируете свои указатели.

template<class ItemType>
struct NodeType
{ 
    //...
    NodeType() : next(nullptr) {} ///Initialize next so we can check for null
};

template<class ItemType>
class Stack
{ 
public:
    Stack() : topPtr(nullptr), stacklength(0) { } ///initialize
    //...

Тогда в вашем Pop, вам нужно проверить наличие пустого стека (вы не можете выскочить, если нет элементов).

template<class ItemType>
void Stack<ItemType>::Pop(ItemType &x)
{
    if (!topPtr)
    {
        //Here, we need to decide how to handle this.
        //One way would be to throw an exception,
        //another way would be to change the method signature
        //and return a bool.
    }
    ///...
}
Другие вопросы по тегам