2017-12-03 16 views
-1

私は完全な木である個々のノードとTrieSetクラスですTrieNode構造体でトライの実装を作成しています。私が最初に再帰的にすべての子を削除し、最終的にノードを削除デストラクタを定義しようとしているが、私はセグメンテーションフォールトを取得していますデストラクタ

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

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

:ここに私のTrieNodeの署名があります。 、任意の助けをいただければ幸いです

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

3つのルール、5つのルール、またはゼロのルールのいずれかに従う必要があります。 – aschepler

+0

コンストラクタのコードを追加できますか? – 1201ProgramAlarm

答えて

0

childrenアレイは初期化されていないため、データはランダムなガベージであり、それらを削除しようとします。未定義の動作、クラッシュする可能性があります。

deleteChildrendelete nodeを呼び出すと、デストラクタ内からdelete thisを呼び出すのと同じように、再帰的なデストラクタ呼び出しが発生するため、間違っています。

その他の問題がある可能性があります。私は広範囲に見ていない。

+0

ありがとう、再帰呼び出しを取り除くために少しコードを修正しました。悲しいことに、私はまだsegの欠陥があります。 – Alex