Ошибка сегментации при попытке использовать заданную функцию - PullRequest
0 голосов
/ 31 октября 2018

У меня проблема с попыткой установить личный элемент данных в классе узла. Вот файл:

#include <iostream>
#include <string>
using namespace std;

template <class myType>
class node{
    private:
        myType data;
        node<myType>* next;
    public:

        // other functions

        void setData(myType p){
            data = p;
        }

        // other functions

};

Вот класс, который пытается использовать класс узла:

template <class myType>
class LL{
    private:
        node<myType>* head;
        int index;
    public:

        // other functions            

        void addItem(myType d){
            node<myType>* p;
            p->setData(d);
            p->setNext(NULL);
            if(head == NULL){
                head = p;
            }
            else{
                node<myType> *temp;
                temp = head;
                head = p;
                head->setNext(temp);
            }
        }

        // other functions
};

Проблема возникает при попытке использовать функцию setData в первом классе узлов. В функции addItem из класса LL, когда вызывается p-> setData, я получаю ошибку сегментации. С помощью отладки я обнаружил, что ошибка сегментации возникает, когда программа пытается установить data = p в функции setData. Какие-нибудь советы?

1 Ответ

0 голосов
/ 01 ноября 2018
node<myType>* p;

Вы объявили указатель. Вы не инициализировали указатель, поэтому он не указывает ни на один узел (и при этом он не указывает на ноль; указанный адрес памяти является неопределенным).

p->setData(d);

Здесь вы разыменовываете p для вызова функции-члена на указанном объекте. Но заостренного объекта нет, потому что вы не создали ни одного узла, а p не указывает ни на один узел. Поведение вызова функции-члена неинициализированного указателя не определено (в общем случае чтение любого неопределенного значения имеет неопределенное поведение).

...