0

我想知道这是否正确,因为 XCode 在执行 getNext() 时给了我一个 EXC_BAD_ACCESS 错误,但 Visual Studio 没有。

void deleteList(LinkedList* node) {

    if (node == NULL)
        return;
    else {
        delete node;
        node=NULL;
        deleteList(node->getNext());
    }
}
4

2 回答 2

3

您删除一个节点,将其无效,然后使用它来调用getNext(). 那是未定义的行为。

只需在节点析构函数中做同样的工作。

struct NodeT
{
  NodeT* next;
  ~NodeT()
  {
    delete next;
  }
};

要么,要么先删除尾部,然后再删除节点本身:

void deleteList(LinkedList* node) {

    if (node == NULL)
        return;
    else {
        deleteList(node->getNext());
        delete node;
    }
}
于 2013-03-17T14:49:39.983 回答
0

设置nodeNULL通常是让系统知道它为空的一种方式。设置节点通常会使您的程序更安全,因为当您尝试删除节点时NULL,编译器或 IDE 可能会通知您它是一个节点。为了更深入地了解,您可以查找一些关于空指针的说明。NULLNULL

于 2013-03-17T15:03:05.173 回答