Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能删除Linkedlist节点?_C++ - Fatal编程技术网

C++ 为什么我不能删除Linkedlist节点?

C++ 为什么我不能删除Linkedlist节点?,c++,C++,我想从Arraylist创建linkedList。我使用新的curNode并给出值,但当我想在使用后删除它时,它是错误的。为什么我不能删除curNode struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode *addListNode(int* arr,int n){ ListNode *head=NULL,*curNode,*t

我想从Arraylist创建linkedList。我使用新的curNode并给出值,但当我想在使用后删除它时,它是错误的。为什么我不能删除curNode

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

ListNode *addListNode(int* arr,int n){
    ListNode *head=NULL,*curNode,*tail;
    for(int index=0;index!=n;++index){
        curNode = new ListNode(arr[index]);
        if (head==NULL)
            head=curNode;
        else
            tail->next=curNode;
        tail = curNode;
        //delete curNode;
    }
    return head;
}

实际上,您正在分配指针,而不是值:
head=curNode
tail->next=curNode
tail=curNode。
因此,您不应该删除同一个指针,因为它将释放新创建的ListNode元素所指向的内存


您应该在使用返回的ListNode或更好的ListNode析构函数后删除分配的内存。还可以考虑使用智能指针(例如:代码> STD::UnQuyJPPT),以确保分配的内存将在不再使用时自动释放。

什么意思,这是错误的吗?发生了什么?执行删除操作时,您正在删除刚刚创建的节点(释放指针curNode下的内存,也释放head/tail下的内存)。当您从列表中删除节点时,您可以将其删除。如果要删除java中的节点,您可以使用迭代器删除迭代器。因为您存储的是指针,所以您没有使用它,所以不应该删除任何内容。(它是“数组”,而不是“数组列表”。)