首页 > 解决方案 > 读取访问冲突,温度为 0xDDDDDDDD

问题描述

void deleteBasedOnID(student* head,student* tail,int stu_ID)
{

    if (head == NULL)
    {
        std::cout << "nothing to be deleted";
    }

    else if (stu_ID == head->stu_ID)
    {
        //delete from the beginning
        temp = head->next;
        if (temp == NULL)
        {
            tail = NULL;
        }
        else
        {
            temp->prev = NULL;
        }
        std::cout << "Deleted ID: " << head->stu_ID << std::endl;
        delete head;
        head = temp;
    }

    else
    {
        //start from second 
        temp = head;
        previous = NULL;
        while (stu_ID != temp->stu_ID)
        {
            previous = temp;
            temp = temp->next;
            if (temp == NULL)
            {
                std::cout << "no such ID!" << std::endl;
                return;
            }
        }

        previous->next = temp->next;
        if (temp->next == NULL) 
        {
            tail = previous;
        }
        else
        {
            temp->next->prev = previous;
        }

        std::cout << "Deleted ID: " << temp->stu_ID << std::endl;
        delete temp;

    }

}

我有一个学生结构和全局指针头和尾,我将所说的头和尾放入 deleteBasedOnID 头和尾参数

它适用于 if(head == NULL) 或 else 块,但是每当我尝试从头开始删除时,它在内部工作正常,但在我尝试显示列表后,发生错误。

这是我的显示功能体

void display()
{   

    temp = head;
    while (temp != NULL)
    {
        std::cout << "Student ID: " << temp->stu_ID << std::endl;
        temp = temp->next;
    }
}

主功能

int main()
{
    head = NULL;
    tail = NULL;
    temp = NULL;

    int id;
    std::cout << std::endl;
    std::cout << "Enter the id you want to delete: ";
    std::cin >> id;
    deleteBasedOnID(head, tail, id);
    std::cout << "New sorted list" << std::endl;
    display();

    return 0;
}

标签: c++

解决方案


在您的deleteBasedOnId-function 中,您更改参数的值,这是指向您在 中创建head的指针的副本。in 中的原始指针保持其值,该值现在指向已删除的内存,因此出现了段错误。您可以引用指向的指针作为参数来解决此问题:headmainmainhead

void deleteBasedOnID(student*& head,student*& tail,int stu_ID)

推荐阅读