0

何人かの人の名前をアルファベット順に循環二重リンク リストに挿入したいのですが、追加できるのは 3 つまでで、なぜこれが起こっているのかわかりません。挿入する新しいノードを関数に渡し、insertそれへのポインターを作成し、正しい挿入場所を見つけるためにリスト全体をループしています。ただし、名前が 3 つを超えると、ノードが削除され、別のノードが挿入されます。誰かがこれを理解するのを手伝ってくれますか?

その他の詳細:

  • それぞれにとと呼ばNodeれる 2 つのポインターがあり、データ メンバーとして呼び出されます。nextprevstringdata
  • このListクラスには、挿入関数と表示関数、およびダミーのヘッド ノードを指すヘッド ポインターが含まれています。が初期化されると、このヘッド ノードnextprevポインタはそれ自体を指します。List

これは私が書いた挿入関数です:

void List::insert(Node newObject)
{


    Node *toInsert = &newObject;
    Node *cur = head->next;

    while((cur != head) && (newObject.data > cur->data))
    {
            cout << "Is this loop entered?" << endl;
            cur = cur->next;

    }

    toInsert->next = cur;
    toInsert->prev = cur->prev;

    cur->prev = toInsert;
    toInsert->prev->next = toInsert;        

}

そして私のmain.cpp

#include "list.h"
#include "node.h"

using namespace std;

int main()
{


    Node nikhil = Node("Nikhil");
    Node kaustubh = Node("Kaustubh");
    Node jon = Node("Jonathan");
    Node james = Node("James");
    Node elias = Node("Elias");
    Node kenny = Node("Kenny");

    List suiteMates;

    suiteMates.insert(nikhil);
    suiteMates.insert(kaustubh);
    suiteMates.insert(jon);
    suiteMates.insert(james);
    suiteMates.insert(elias);
    suiteMates.insert(kenny);

    suiteMates.display();
}
4

1 に答える 1

0

関数insertはローカル変数を挿入します。これは、制御が関数の外に渡されると範囲外になります。後で、その消えたオブジェクトへのポインターを逆参照しようとします。これはUndefined Behaviorです。

于 2013-10-22T21:07:18.663 に答える