2017-12-03 10 views
-1

개별 노드 인 TrieNode 구조체와 전체 트리 인 TrieSet 클래스를 사용하여 Trie의 구현을 만듭니다. 내가 처음 재귀 적으로 모든 아이들을 삭제하고 마지막 노드를 삭제 소멸자를 정의하기 위해 노력하고있어,하지만 난 세그먼트 오류를 ​​받고 있어요트라이 트리에서 트라이 노드의 소멸자

struct TrieNode { 
    TrieNode(bool in, TrieNode *p); 
    ~TrieNode(); 
    void deleteChildren(TrieNode *node); 
    bool isLeafNode(); 

    bool inSet; 
    TrieNode *parent; 
    TrieNode *children[30]; 
}; 

: 여기 내 TrieNode의 서명입니다. 여기 내 생성자, 소멸자 및 도우미 함수에 대한 코드는 다음과 같습니다.

감사합니다.

+0

규칙 3, 규칙 5, 규칙 0 중 하나를 따라야합니다. – aschepler

+0

생성자에 대한 코드를 추가 할 수 있습니까? – 1201ProgramAlarm

답변

0

children 배열이 초기화되지 않으므로 데이터가 임의의 가비지가되고 삭제하려고합니다. 정의되지 않은 동작 및 충돌 가능성이 있습니다.

deleteChildren에서 delete node을 호출하면 소멸자 내에서 delete this을 호출하는 것처럼 재귀 소멸자 호출이 발생하므로 잘못되었습니다.

다른 문제가있을 수 있습니다. 나는 광범위하게 보지 않았다.

+0

감사합니다. 재귀 호출을 없애기 위해 코드를 수정했습니다. 슬프게도, 나는 아직도 seg fault를 얻고있다. – Alex