Исключение: запись о нарушении прав доступа. temp был nullptr - PullRequest
1 голос
/ 06 января 2020

Я получаю сообщение об ошибке в функции insert() в операторе else.

Вот структура:

struct Node
{
    int data;
    Node* next;
};
Node* head = NULL;

, а вот функция:

void insert(int data)
{
    Node* New = new Node();
    if (head == NULL)
    {
        New->data = data;
        head = New;
    }
    else
    {
        // down here where the error occured
        Node* temp = new Node();
        temp = head;
        while(temp != NULL)
        {
            temp = temp->next;
        }
        temp->data = data;
        temp->next = New;
    }
}

1 Ответ

2 голосов
/ 06 января 2020

Ваш l oop:

while(temp != NULL)

завершается, когда temp становится равным nullptr (обратите внимание, что вам лучше использовать эту константу в C ++ вместо NULL) и сразу после этого l oop вы разыграете temp. Также без какой-либо причины вы присваиваете результат new для temp и немедленно теряете его в следующей строке кода (что приводит к утечке памяти). И вы всегда должны присваивать data новому элементу, а не temp (который считается последним элементом). Ваша логика c должна выглядеть примерно так:

void insert(int data)
{
    Node* New = new Node();
    New->data = data;     // note you better do these 2 lines in constructor
    New->next = nullptr; 
    if (head == nullptr)
    {
        head = New;
        return;
    }
    Node* temp = head; 
    while( temp->next != nullptr ) // look for the last item
        temp = temp->next; 
    temp->next = New;
}
...