我在下面描述了两个结构。设置huffmanTree = tempNode
后,huffmanTree
的内部指针right和left都为NULL。然而,在此之前该值仍然有效,但在将两个结构设置为彼此相等之后该值消失了。我做错了什么?
我只想创建一个huffmanTree 结构
并用一些数据对其进行初始化。然后创建一个 tempNode
,其中 HuffmanTree *left
指向 huffmanTree
,HuffmanTree *right
指向新数据。当我从 huffmanTree
打印出数据时,它是 NULL
// 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
}
最佳答案
您执行 tempNode.left = &huffmanTree;
,然后执行 huffmanTree = tempNode;
。如果某些事情没有出错,那将是一个奇迹......
说真的,在作业之前:
huffmanTree is { new, new }
tempNode is { &huffmanTree, new }
赋值后,huffmanTree is { &huffmanTree, new }
所以你的指针跳跃本质上是:
huffmanTree->huffmanTree->huffmanTree->huffmanLeaf.GetData();
并且由于您没有为“huffmanTree”定义任何 huffmanLeaf,它默认返回它具有的任何值(未定义的行为,因为您没有在构造函数中初始化 data
,正如您应该的那样)
关于c++ - 设置两个结构彼此相等后指针为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40624819/