Как исправить «нарушение прав чтения» в связанном списке - PullRequest
0 голосов
/ 16 мая 2019

Я реализовал неориентированный граф, используя LinkedList. Моя проблема в том, что я получаю нарушение прав доступа для чтения (p было 0xCDCDCDCDCD) для каждой функции LinkedList.

class LinkedList {

public:

    Node *start;
    LinkedList() { start = NULL; } //default constructor

    //---------------------------------

    ~LinkedList() //destructor

    {

        Node *temp;
        while (start)

        {

            temp = start->next;
            delete start;
            start = temp;

        }

    }
    //----------------------------------
    //get the address of first node of the linked list

    Node* getStart() { return start; }

    //---------------------------------
    //insert an element into linked list

    void insert(int data)

    {

        Node *ptr = new Node(data);
        if (start == NULL)

        {

            start = ptr;

        }

        else

        {

            Node *temp = start;

            while (temp->next)

                temp = temp->next;

            temp->next = ptr;

        }

    }

    //---------------------------------
    bool findNode(int data) {
        Node *p = start;
        while (p)

        {

            if (p->info == data)
                return true;

            p = p->next;

        }
        return false;
    }


};

Затем я реализовал класс Graph следующим образом:

class Graph {

private:
    LinkedList *A;
    int vertex;
    int edges;

public:
    Graph(int vertex) {
        this->vertex = vertex;
        edges = 0;
        A = (LinkedList *)malloc(sizeof(LinkedList)*vertex);
    }
    void insertEdge(int u, int v) {
        if (A[u].findNode(v) == false) {
            A[u].insert(v);
            A[v].insert(u);
            edges++;
        }
    }
};

И Узел:

class Node {
    friend class LinkedList;
    int info;
    Node *next;
    Node() //default constructor
    {
        info = 0;
        next = 0;
    }
    Node(int item) //parameterized constructor

    { 
        info = item;
        next = 0; 
    }

};

Main:

int main()

{
    Graph G(7);
    G.insertEdge(1, 3);
    G.insertEdge(4, 6);
    G.displayGraph();
    return 0;
}

Я не совсем уверен, что происходит, но каждый раз, когда я пытаюсь его отладить, он отправляет меня в функцию для указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...