设置两个结构体相等后,指针为NULL
pointer is NULL after setting two struct equal each other
我有两个结构体描述如下。设置huffmanTree = tempNode
后,huffmanTree
左右的内部指针为NULL。然而,在此之前,该值仍然有效,但在设置两个结构体彼此相等后,该值消失了。我做错了什么?
我只是想创建一个huffmanTree struct
并初始化它与一些数据。然后创建一个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
)
相关文章:
- 当使用通配符和null指针调用函数时,对输出的说明
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- API 返回智能指针的 std::optional 以明确指定指针可能为 null 是否有意义?
- 为什么在C++中增加指针后打印了一个值而不是 NULL/0?
- 指针永远不会在链表深层复制构造函数中达到 null
- 正在将对象指针数组初始化为NULL
- 为什么在C++中使用delete后指针不为NULL
- C++中的指针否定 (!ptr == NULL)
- 如何返回值为NULL的变量指针
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- 将位数组转换为 HBITMAP 后 bmBits 的 NULL 指针
- C++ 由于类析构函数中的指针设置为 NULL 而导致的内存泄漏
- 如果指针在C++为 NULL 则修改指针
- 在访问类的树层次结构中的对象时避免使用 null 指针
- if(NULL==指针)和if(指针==NULL)之间有什么区别
- 从转储中获取调用堆栈的几乎所有帧中的此指针 NULL 表明什么
- 指针 NULL 在C++中的函数
- 自动指针= NULL错误
- 如何使指针指向指针NULL
- 当我们分配指针 NULL 时会发生什么