간단하게 destructor
메서드를 사용하여 각 노드를 파괴하지만 몇 가지 문제가 있습니다. 연결된 목록에서 항목을 제거하려고하면 해당 요소는 제거되지만 다음 요소도 모두 제거됩니다. 인쇄하거나 더 많은 요소를 추가하려고하면 프로그램이 중단됩니다. 충돌이 발생하면 내 텍스트 편집기에 내 PrintNode
메서드가 강조 표시됩니다.노드를 파괴 할 때 연결된 목록 프로그램이 충돌 함
Node::~Node() {
delete next;
}
나는이 방법을 사용하여 내 목록에서 요소를 제거하고 :
Node*Node::DeleteNode(Node *head, string a) {
if (head == NULL) return head;
head->next = DeleteNode(head->next, a);
if (head->get()==a) {
Node* temp = head->next;
next = NULL;
delete head;
return temp;
}
else {
return head;
}
}
그리고 나는 간단한 인쇄 할 :
void Node::PrintNode() {
cout << name << endl;
if (next) {
next->PrintNode();
}
}
을 여기
내destructor
방법 소멸자가 내 프로그램을 중단시키는 이유는 무엇입니까?
당신이 당신의 코드를 디버깅나요? 소멸자는'delete next'를 호출합니다.이 함수는'next '를 호출하는'next'의 소멸자를 호출합니다.'next'를 호출하는'next'의 소멸자를 호출합니다. – PaulMcKenzie
이것은 연결 목록을 구현하는 매우 어색한 방법입니다. 'Node' 클래스에는 사용자 정의 소멸자가 전혀 없어야합니다. 필요한 경우 링크 된 목록 코드에서 필요한 노드를 자동으로 삭제하지 마십시오. 단일 노드를 목록에서 제거하려면 어떻게해야합니까? 어떻게 소멸자가있는'Node' 클래스로 그렇게 할 것을 제안합니까? – PaulMcKenzie
"목록에서 단일 노드를 제거하려면 어떻게해야합니까?" 그게 내 문제 같아. –