我想知道这是否正确,因为XCode在执行getNext()时会给我一个EXC_BAD_ACCESS错误,但Visual Studio却没有。
void deleteList(LinkedList* node) {
if (node == NULL)
return;
else {
delete node;
node=NULL;
deleteList(node->getNext());
}
}
答案 0 :(得分:2)
删除节点,使其无效,然后使用它来调用getNext()
。这是未定义的行为。
只需在节点析构函数中执行相同的工作。
struct NodeT
{
NodeT* next;
~NodeT()
{
delete next;
}
};
或者首先删除尾部,然后才删除节点本身:
void deleteList(LinkedList* node) {
if (node == NULL)
return;
else {
deleteList(node->getNext());
delete node;
}
}
答案 1 :(得分:0)
将node
设置为NULL
通常是一种让系统知道它是空的方法。设置NULL
节点通常会使您的程序更安全,因为当您尝试删除NULL
节点时,编译器或IDE可能会通知您它是NULL
节点。为了更深入地理解,您可以查找有关空指针的一些说明。