我想知道这是否正确,因为 XCode 在执行 getNext() 时给了我一个 EXC_BAD_ACCESS 错误,但 Visual Studio 没有。
void deleteList(LinkedList* node) {
if (node == NULL)
return;
else {
delete node;
node=NULL;
deleteList(node->getNext());
}
}
我想知道这是否正确,因为 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
,编译器或 IDE 可能会通知您它是一个节点。为了更深入地了解,您可以查找一些关于空指针的说明。NULL
NULL