C++ 为什么不能;删除标题处的“;执行链接列表时是否正常工作?

C++ 为什么不能;删除标题处的“;执行链接列表时是否正常工作?,c++,list,hyperlink,C++,List,Hyperlink,我实现了以下代码来删除头部的元素。当程序运行到“delete p”时,它将影响前一个Head,Head变为NULL。发生了什么事 Node<T>* p; p = Head; Head = Head->next; delete p; Node*p; p=水头; 头部=头部->下一步; 删除p; 此功能将删除第一个节点(节点 用头指着)。如果节点被删除,则返回true;如果列表为空,则返回false 这里使用双指针作为输入参数(head),因为he

我实现了以下代码来删除头部的元素。当程序运行到“delete p”时,它将影响前一个Head,Head变为NULL。发生了什么事

    Node<T>* p;
    p = Head;
    Head = Head->next;
    delete p;
Node*p;
p=水头;
头部=头部->下一步;
删除p;

此功能将删除第一个节点(节点 用头指着)。如果节点被删除,则返回true;如果列表为空,则返回false

这里使用双指针作为输入参数(head),因为head将 必须更新,此值应反映 在这个功能之外

bool deleteHeadElement(Node** head)  
{
    if (*head == nullptr)
    {
        // List is empty, nothing to delete
        return false;
    }

    // Store the node that has to be deleted
    Node* nodeToDelete = *head;

    // Update the head to point to next nodeToDelete
    *head = nodeToDelete->next;

    delete nodeToDelete;

    // 1st element of node has been deleted.
    return true;
}
调用此函数后,您可以随后调用它,并且它将处理在前一次调用后列表变为空的场景

注: 关于0xfeeefeee值,您似乎试图以某种方式释放已释放的内存。也许你应该检查一下你的大脑是否得到了适当的更新

另外,确保只有在使用new分配节点时才使用delete释放节点的内存。如果指向的内存为空,delete会小心处理


如果已使用malloc()将内存分配给节点,则应使用free()解除分配。

如果head为null,则无法执行
head=head->next您需要先检查。您可能没有显示足够的代码来识别真正的问题。也许您在函数中调用了它,并按值传递了
Head
,注意到调用函数中的
Head
没有更新。欢迎使用堆栈溢出。这个代码看起来不错;也许问题在别处。没有一句话,很难说得更多。是的。你是对的。当我调试代码时,Head=Head->next已经成功。因此,下一步“删除p”现在不应该影响Head的数据。但是当我检查头部数据时,我发现它也发生了变化,并被设置为头部“=0x008f4a20{data=-17891602 next=0xfeeefeee}”,我现在找不到原因。
0xfeeefeee
是一个重要的代码: