以下の2つの構造体があります。 huffmanTree = tempNode
を設定した後、huffmanTree
の右と左の内部ポインタはNULLです。しかし、その前にも値は有効ですが、2つの構造体を互いに等しく設定した後、値は消えました。私は間違って何をしていますか?2つの構造体が互いに等しく設定された後にポインタがNULLになる
huffmanTree struct
を作成して、データで初期化したいだけです。次にを作成し、HuffmanTree *left
がhuffmanTree
を指し、HuffmanTree *right
が新しいデータを指していることを示します。私はhuffmanTree
からデータをプリントアウトするとき、それは
// Leaf node
typedef struct HuffmanLeaf {
private:
char data;
int count;
public:
HuffmanLeaf() {
}
void setData(char data) {
this->data = data;
}
void setCount(int count) {
this->count = count;
}
char getData() {
return this->data;
}
int getCount() {
return this->count;
}
}HuffmanLeaf;
// Huffman tree
typedef struct HuffmanTree {
HuffmanTree *right;
HuffmanTree *left;
HuffmanLeaf huffmanLeaf;
} HuffmanTree;
int main() {
/* huffmanLeaf[] was defined and initialized
.
.
.
.
*/
// Take the first two smallest and so on
HuffmanTree huffmanTree;
HuffmanTree tempNode;
// Allocate memory for internal struct
huffmanTree.left = new (HuffmanTree);
huffmanTree.right = new (HuffmanTree);
tempNode.left = new (HuffmanTree);
tempNode.right = new (HuffmanTree);
// Two character with least frequency. Create a new Tree
huffmanTree.right->huffmanLeaf = huffmanLeaf[0];
huffmanTree.left->huffmanLeaf = huffmanLeaf[1];
// Next character
tempNode.left = &huffmanTree; // have node left point to huffmanTree
tempNode.right->huffmanLeaf = huffmanLeaf[2]; // new data on node right
/* Data is still here for tempNode */
cout << tempNode.left->left->huffmanLeaf.getData() << endl;
/* Error occured after this */
huffmanTree = tempNode;
// Value is NULL
cout << huffmanTree.left->left->huffmanLeaf.getData() << endl; // Value is NULL
}
HuffmanTreeのデストラクターの内容とコピーコンストラクタ/代入演算子の内容を表示できますか?速い修正は、途中でhuffmanTreeとtempNodeのポインタを作ることです。 – dseifert
それは働いた。なぜか教えてくれますか? – tuyenle