2016-03-30 23 views
1

私はこのようになりますクラスを持っている:私はData値を割り当てるために行くとき「char」に「char」を割り当てると、seg faultが発生するのはなぜですか? C++

class myTreeNode 
{ 
    public: 
     char Data; 
     myTreeNode *childA = NULL; //A's always go in child1 
     myTreeNode *childT = NULL; //T's always go in child2 
     myTreeNode *childC = NULL; //c's always go in child3 
     myTreeNode *childG = NULL; //G's always go in child4 
}; 

はしかし、私はワンセグ障害を受けます。私はこのような操作を行います。

root->childT->Data = p_data; 

どこp_datamyTreeNode *root = new myTreeNode;によって作成されたポインタchar = trootされています。なぜDataに値を割り当てると、segフォルトが発生するのですか? char Data = 't'と同じことではありませんか?

+8

あなたはchildT'、その時点で非nullにする '設定がありますか? – fuzzything44

+0

いいえ、私はしませんでしたが、今私はします。 –

+3

'root-> childT-> Data = p_data;' charにcharを代入するだけではなく、2つのポインタを逆参照します。それらの逆参照のうちの1つが、セグメンテーションの誤りである可能性が非常に高い。 「なぜ2つのポインタを逆参照し、char segfaultにcharを割り当てるのですか?あなたはたぶんここで質問する必要はないでしょう。 –

答えて

4

お子様がメモリの場所を指していません。ルートノードの新しいインスタンスのみを作成しました。ヌルポインタの逆参照があるため、セグメンテーションが発生しています。例えば

class myTreeNode 
{ 
public: 
    char Data; 
    myTreeNode *childA = NULL; //A's always go in child1 
    myTreeNode *childT = NULL; //T's always go in child2 
    myTreeNode *childC = NULL; //c's always go in child3 
    myTreeNode *childG = NULL; //G's always go in child4 
}; 

int main() 
{ 
    // allocate memory 
    myTreeNode *root = new myTreeNode; 
    root->childT = new myTreeNode; // allocate child 

    root->childT->Data = 'a'; 

    // delete allocated memory 
    delete root->childT; 
    delete root; 
    return 0; 
} 
関連する問題