我似乎找不到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/