Небольшая проблема с созданием единого связанного списка в C ++ - PullRequest
0 голосов
/ 15 мая 2019

Я собираюсь создать один связанный список и создать функцию (Locate ()), которая возвращает адрес элемента. Но в итоге я не увидел результата этой функции. Я попробовал это. Эта функция должна быть запущена, но результат отличается от того, что я ожидал.

используйте vs2019 в Windows10 , студенту:)

#include<iostream>
using namespace std;
struct Node {                           //Node
    int data;
    Node* link;
    Node(int item, Node* l = NULL)
    {
        data = item;
        link = l;
    }
    Node(Node* l = NULL)
    {
        data = 0;
        link = l;
    }
};

class Link :public Node {        //Link
private:
    Node* first;
public:
    Link(Node* l = NULL)
    {
        first = l;
    }
    Link(int d, Node* l = NULL)
    {
        first = new Node(d);
    }
    Node* Locate(int i);
};
Node* Link::Locate(int i)       //Locate()
{
    if (i < 0)
    {
        cerr << "wrong operation when locating" << endl;
        exit(1);
    }
    int count = 0;
    Node* current = first;
    while (count < i && current->link != NULL)
    {
        current = current->link;
        count++;
    }
    return current;
}
int main()
{
    Link a;
    Node* b = new Node(1);
    Node* c = new Node(2);
    a.link = b;
    b->link = c;
    cout << a.data << ' ' << b->data << ' '<<c->data<<endl;
    cout << a.Locate(1) << endl;
    return 0;
}

Не будет выводить результат вызова этой функции 'Locate ()'

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Когда я повторно изменяю конструктор List, его (Locate ()) выводится нормально и получается ожидаемый результат.Модифицированные конструкторы следующие:

Link()
    {
        first = new Node;
    }
    Link(int d)
    {
        first = new Node(d);
    }
    Node* Locate(int i);
0 голосов
/ 16 мая 2019

Locate() доступ first->link. В то время first является нулевым указателем. После чего ваша программа демонстрирует неопределенное поведение; на практике это, скорее всего, вылетает.

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