C++의 링크 된 목록에 문제가 있습니다. 나는 클래스는 그렇게 찾고있다 :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();
};
내가 그러나 연산자의 선언이 내가 제대로 작동하는지 확인 해요, 여기에 모든 기능을 설명 못해 =
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;
}
은 복사 할 수있다 값을 하나의 목록에서 다른 노드를 추가하거나 필요하면 삭제하십시오. 그것은 목록이 동일하거나 두 번째 노드가 더 길기 때문에 작동합니다 (따라서 노드를 삭제해야합니다). 노드가 몇 개 추가되어야합니다.
==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)
이 선언문에 어떤 문제가 있는지 잘 모르겠습니다. 도움을 청합니다.
죄송합니다. 형식이 잘못 되었다면 크롬 문제가 생겼습니다. 그 이유가 여기 있습니다. 어쩌면 예제가 있지만이 예제를 사용해야하는데, 이런 식으로해야 할 작업이있었습니다. 예제 코드가있어서 그냥 완료해야했습니다.
* dst = new node;
그리고 103 만 마지막 닫는 대괄호 도움을
}
다시 덕분입니다 : 93입니다 라인 : 난 여전히 같은 문제가 있습니다.
코드를 올바르게 포맷하십시오. 누구도'/ dev/random'의 출력처럼 보이는 코드를 읽지 않을 것입니다. – rightfold
링크 된 목록을 올바르게 가져 오는 방법에 대해 많은 예제가 있습니다. 다시 묻지 않아도됩니다. –
@ not-rightfold done : –