我似乎找不到2条代码的bug。我知道这些里面有问题。每个一个。

int pop()
{
    Node* temp = new Node();
    temp = tail;
    tail->prev()->setNext(NULL);
    int tempV = temp->key();
    delete temp;
    return tempV;
}


另一段代码是这样的:

int main()
{
    Node* t = new Node(0,NULL);
    t = Node(1,t);
    t = Node(2,t);
    delete t;
}


我考虑了两段代码。对于第一段代码,我认为错误是您不应该使用关键字new在堆上创建Node *临时文件。它应该只是Node* temp = tail;我相信。谁能确认?

对于第二段代码,我认为错误是您同时不需要

t = Node(1,t);
t = Node(2,t);


编辑::对不起,我犯了一个错误。应该是Node而不是Node。我的朋友告诉我,这必须与记忆有关。是否存在内存泄漏,因为使用new声明了多个节点?还是我们需要最后2个新关键字?

谢谢

最佳答案

弹出元素时,无需创建“新”节点。您必须删除链接列表的最后一个元素-而不是创建新节点。

对于第二个问题,您不需要

t = node(1,t)
t = node(2,t)


如果函数返回当前添加的节点。
但是,如果该函数返回链接列表的标题,则它是必需的。这取决于您如何编写node函数。

关于c++ - C++在与链接列表相关的代码中查找错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22677092/

10-11 23:20
查看更多