【问题标题】:Should I delete a used pointer which i created in a function?我应该删除在函数中创建的使用过的指针吗?
【发布时间】:2019-03-24 22:42:50
【问题描述】:

哟,我在 C++ 中搞乱了单个链接列表,我遇到了这种困惑。我在 insert 函数中创建了一个指针,但我不确定它是否会被删除。

我想如果我像这样将它推几个街区就可以删除它:temp = temp->next->next 但它看起来很傻。

void List::insert(int data){
    Node* newNode = new Node(data);
    newNode->next = nullptr;
    if(isEmpty())
    {
        head = newNode;
        std::cout << "empty";
    }else{
        Node* temp = head;
        while(temp->next!=nullptr){
            temp = temp->next;
        }
        temp->next = newNode;
        delete temp; //If i remove this the program works ok and it is reasonable,since i delete the ref
    }
}

我很确定我应该删除节点,但我不是 100% 确定我必须这样做。有任何线索吗?

【问题讨论】:

  • 不要使用原始指针和new / delete,你ain't gonna need it
  • 而且不要实现链表!为什么哦,为什么人们会这样做?有史以来最没用的数据结构。
  • 不,它不符合您的预期。您在 newNode 之前删除了对象,因此您在 insert 函数中删除了对象,并且永远失去了新创建的节点。
  • @NeilButterworth 因为老师要求他们这样做。它几乎是最简单的数据结构,就在向量之后。老实说,如果你不实现自己的傻链表,你怎么知道它是如何工作的以及使用它的成本有多大?
  • 是的,几乎是@Yksisarvinen。我猜我的人 Neil 刚刚从 if 直接转到 AI 编程

标签: c++ linked-list


【解决方案1】:

这里有一个线索:考虑List::size()。插入前有多少个节点,插入后有多少个? new Node 创建一个节点,delete temp 删除一个节点。

现在,如果你做对了这些事情,你可能仍然会遇到删除错误节点的错误,但至少 insert 是对的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2011-10-04
    • 2015-02-07
    • 2011-05-18
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多