为什么我不能删除链接列表节点?

时间:2014-11-19 08:38:03

标签: 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,*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;
}

1 个答案:

答案 0 :(得分:0)

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

您应该在ListNode析构函数中使用返回的ListNode或更好的内容后删除已分配的内存。还要考虑使用智能指针(例如std::unique_ptr<ListNode>)来确保分配的内存在不再使用时会自动释放。