2017-12-03 243 views
-1

我正在創建Trie的實現,TrieNode結構是個別節點和TrieSet類,它是完整的樹。這裏是我的TrieNode的簽名:Trie樹中的Trie節點的析構函數

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

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

我試圖確定哪些第一遞歸刪除所有的孩子,最後刪除該節點的析構函數,但我得到一個分段錯誤。這裏是我的構造函數,析構函數和它的幫助函數的代碼:

TrieNode::TrieNode(bool in, TrieNode *p) 
{ 
    inSet = in; 
    parent = p; 
} 

TrieNode::~TrieNode() 
{ 
    for(int i = 0; i < 30; i++) 
    { 
     if(children[i] != nullptr) 
     { 
      delete children[i]; 
     } 
    } 
} 

任何幫助,將不勝感激,謝謝!

+0

您需要遵循三法則,五法則或零法則。 – aschepler

+0

你可以爲你的構造函數添加代碼嗎? – 1201ProgramAlarm

回答

0

children數組未被初始化,所以數據將是隨機垃圾並試圖刪除它們未定義的行爲,並可能崩潰。

deleteChildren中調用delete node是錯誤的,因爲它導致遞歸析構函數調用(就像在析構函數中調用delete this一樣)。

可能還有其他問題。我沒有廣泛地看。

+0

謝謝,我修正了一些代碼以擺脫遞歸調用。可悲的是,我仍然遇到一個seg故障。 – Alex