-4

C++ のリンク リストに問題があります。私はそのようなクラスを持っています:

class list {
    private: struct node {
        node * next;
        int val;
    };
    node * head;
    node * current;
    public: list();
    list(const list & l);
    list & operator = (const list & l);~list();
    void insert(int a);
    void goToHead();
    int getCurrentData();
    void advance();
    bool moreData();
};

ここではすべての関数について説明しませんが、正しく動作していると確信していますが、 operator = の宣言があります。

list & list::operator = (const list & l) {
    if ( & l == this) return *this;
    current = NULL;

    node * src, * * dst;
    head = ( * this).head;

    src = l.head;

    dst = & head;
    while (src) {
        if (!( * dst)) { * dst = new node;
        }
        ( * dst) - > val = src - > val;

        if (src == l.current) current = * dst;
        src = src - > next;

        dst = & (( * dst) - > next);
    }
    while (( * dst) != NULL) {
        node * t = ( * dst) - > next;
        delete * dst;
        ( * dst) = t;
    }
    return *this;
}

あるリストから別のリストに値をコピーし、必要に応じてノードを追加または削除する必要があります。リストが等しい場合、または2番目のリストが長い場合に機能します(したがって、ノードを削除する必要があります)。ただし、いくつかのノードを追加する必要がある場合:

==4582== Conditional jump or move depends on uninitialised value(s)
==4582==    at 0x8048C52: list::operator=(list const&) (list.cpp:103)
==4582==    by 0x804891B: main (testlist.cpp:38)
==4582==  Uninitialised value was created by a heap allocation
==4582==    at 0x402B9B4: operator new(unsigned int) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4582==    by 0x8048BDE: list::operator=(list const&) (list.cpp:93)
==4582==    by 0x804891B: main (testlist.cpp:38)

この宣言の何が問題なのかわかりません。助けてくれてありがとう。

フォーマットが間違っていたら申し訳ありません。Chrome に問題があり、それが原因でした。例があるかもしれませんが、これを使用する必要があります。このようにするタスクがありました。つまり、コード例があり、それを終了する必要がありました。私はまだ同じ問題を抱えています:93行目は:

 * dst = new node;

そして 103 はちょうど最後の閉じ括弧です

}

助けてくれてありがとう。

4

1 に答える 1

0
  1. コードをフォーマットし、93 行目と 103 行目をマークしてください
  2. 93行目が

    *dst=新しいノード;

そして103

node *t=(*dst)->next;

dst->next を (新しいものを作成した後に) NULL の隣に送信することをお勧めします。それ以外の場合は、初期化されていないメモリを指します。

于 2013-10-27T18:13:10.920 に答える