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 はちょうど最後の閉じ括弧です
}
助けてくれてありがとう。