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

に設定nodeすることNULLは、通常、システムが空であることをシステムに知らせる方法です。ノードを設定すると、通常はプログラムがより安全になります。これは、ノードを削除しようとするとNULL、コンパイラまたは IDE がそれがノードであると通知する場合があるためです。より深く理解するために、空のポインターに関する説明を探すことができます。NULLNULL

于 2013-03-17T15:03:05.173 に答える