Обнаружение ошибки при отображении связанного списка - PullRequest
0 голосов
/ 10 октября 2018

Предположим, у нас есть класс List с элементом данных, называемым front, который является указателем Node.Ниже приведена функция-член для отображения членов списка (вызывающий объект).

Имеется ошибка.Определите и опишите ошибку в нескольких словах.Затем исправьте ошибку.

    void display ()
    {
       Node *temp= new Node;
       temp=front;
       while (temp!=NULL)
       {
         cout<<temp->data<<"\t";
         temp=temp->next;
       }
   }

Это был один из вопросов в моем тесте, и я не смог найти ничего неправильного в приведенном выше коде.Я даже запустил этот код в компиляторе, и он отлично работает.

Может кто-нибудь сказать, где ошибка?

1 Ответ

0 голосов
/ 10 октября 2018
Node *temp = new Node; // a pointer, called temp, allocated to a new block 
                       //of memory of size Node
temp = front // the pointer to the block of memory was just overwritten, and now you 
             //don't have a pointer to the block of memory you just allocated

Во-первых, вам не нужно звонить здесь.Просто объявите указатель и назначьте его одновременно.

Во-вторых, поскольку вы действительно вызывали new, вы только что создали утечку памяти, то есть вы выделили память, которая теперь не может бытьосвобождается (пока программа не закрывается).

В-третьих, вы должны получить доступ к фронту с помощью метода доступа.

myList.GetFront() //this should return a pointer to the front of the list

Почему?Хорошо, что произойдет, если вы случайно сделаете что-то вроде:

front = front->next;

Вы только что потеряли указатель на начало списка, как и любой другой метод, использующий front.

...