[英]C++: Is this the proper way to delete a linked list recursively?
我想知道这是否正确,因为XCode在执行getNext()时给出了EXC_BAD_ACCESS错误,但Visual Studio没有。
void deleteList(LinkedList* node) {
if (node == NULL)
return;
else {
delete node;
node=NULL;
deleteList(node->getNext());
}
}
删除节点,使其无效,然后使用它来调用getNext()
。 这是未定义的行为。
只需在节点析构函数中执行相同的工作即可。
struct NodeT
{
NodeT* next;
~NodeT()
{
delete next;
}
};
要么是,要么首先删除尾部,然后才删除节点本身:
void deleteList(LinkedList* node) {
if (node == NULL)
return;
else {
deleteList(node->getNext());
delete node;
}
}
将node
设置为NULL
通常是让系统知道它为空的一种方法。 设置NULL
节点通常会使程序更安全,因为当您尝试删除NULL
节点时,编译器或IDE可能会通知您它是NULL
节点。 为了更深入地理解,您可以查找有关空指针的一些说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.