我想知道这是否正确,因为XCode在做getNext()时给了我一个EXC_BAD_ACCESS错误,但Visual Studio没有。
void deleteList(LinkedList* node) {
if (node == NULL)
return;
else {
delete node;
node=NULL;
deleteList(node->getNext());
}
}
删除一个节点,使其无效,然后用它来调用getNext()
。这是未定义行为。
在nodes的析构函数中做同样的工作。
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
节点。为了更深入的理解,您可以查找一些关于空指针的说明。