В этой реализации стека, использующего связанный список в C ++, при доступе к счетчику членов struct headNode, а top дает ошибку времени выполнения - PullRequest
0 голосов
/ 08 ноября 2019

У меня проблемы с реализацией стека с использованием связанного списка. В этой реализации стека, использующего связанный список в c ++, счетчик структуры struct headNode и top недоступны в методе createNode и push и выдаче ошибки времени выполнения. Скажите, пожалуйста, почему недоступны struct headNode-> top и headNode-> count или вы обнаружите какую-либо другую ошибку в этом коде.

 struct Node{
        int data;
        Node *next;
        Node(int data):data(data), next(NULL){}
    };
    struct headNode{
    int count{0};
    Node *top ;
    headNode():top(NULL){}
    };
    class Stack{
    private:
        headNode *head;
        int c{0};
    public:
        Stack();
        void createStack(int data);
        void push(int data);
    };
        Stack::Stack():head(NULL){}
        void Stack:: createStack(int data)
        {
            Node *topNode= new Node(data);
            head->top=topNode; //RUNTIME ERROR IN THIS LINE OF CODE
            head->count=c++; //RUNTIME ERROR IN THIS LINE OF CODE
        }
        void Stack:: push(int data)
        {
            if(head==NULL)
            {
              createStack(data);
            }
            else
            {
                Node *topNode= new Node(data);
                topNode->next=head->top;
                head->top=topNode;
                head->count=c++;
            }

        }
    int main()
    {
        Stack s ;
        s.push(1);

    }

1 Ответ

0 голосов
/ 08 ноября 2019

Когда вы делаете Stack s;, конструктор выполняется, но эта строка: Stack::Stack():head(NULL) инициализирует head = NULL, а затем в строке s.push(1); функция push вызывает createStack (потому что условие head == NULL являетсяtrue), что, в свою очередь, делает:

head->top=topNode;
head->count=c++;

Но head по-прежнему NULL и приводит к ошибке во время выполнения.

...