Удалить оператор - PullRequest
0 голосов
/ 23 июня 2018
void createnode(int data)
{
    node *temp=new node;
    temp->data=data;
    if(head==null)
    {
        head=temp;
        tail=temp;
        temp=null;
    }
    else
    {
        tail->next=temp;
        temp=null;
    }
}

Должен ли я удалить темп прямо сейчас?Я буду использовать другую функцию для удаления каждого узла.Этого будет достаточно?

Ответы [ 3 ]

0 голосов
/ 23 июня 2018

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

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

После того, как вы установили temp в nullptr, он больше не представляет (/ указывает на) какую-либо память.Вызывать delete для этого не имеет смысла.(Это технически безвредно, но наличие бесполезных строк в вашем коде все еще не годится.)

Я рекомендую вам прочитать, что такое стек и куча, и почему куча нуждается в новом и удалять, пока стек не работает.«т.Это может прояснить ситуацию для вас.

0 голосов
/ 23 июня 2018

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

Нет.

Как следует из названия вашей функции, это createNode() (читается как create узел).

Весь смысл этой функции в том, чтобы создать свой список , создав и связав узлы;
НЕ удалить их.

Удалить только тогда, когда список разрушен или вы хотите удалить (или удалить ) узел из списка.

NOTE :

Переименоватьtemp до "newNode" и не устанавливайте его на null, чтобы не было висящих указателей.

0 голосов
/ 23 июня 2018

Прежде всего, temp имеет значение null, поэтому его удаление будет запрещено.

Если вы спрашиваете, следует ли удалить результат new node в этой функции, ответэто «нет, вы не должны».Если бы вы сделали, список сохранил бы висячие указатели.Правильный способ - удалить узел, когда он удаляется из списка, когда сам список удаляется и т. Д.

...