type BST struct { Root *Node}type Node struct { Key int Parent *Node Left *Node Right *Node}func Init() *BST { var root Node var l Node root = Node{ 10, nil, &l, nil, } l = Node{ 5, &root, nil, nil, } t := BST{&root} return &t}func Init2() *BST { var root *Node var l *Node root = &Node{ 10, nil, l, nil, } l = &Node{ 5, root, nil, nil, } t := BST{root} return &t}我写了 2 种类型的 来返回一个具有 2 个节点的树。当我调用 返回的树时,输出为 5 10。当我调用 返回的树时,输出为 10。我猜GC在第二种情况下释放了其中一个节点。我不知道如何预测GC的行为。Init()InorderPrint()Init()InorderPrint()Init2()
1 回答

胡说叔叔
TA贡献1804条经验 获得超8个赞
如果你想开始工作,问题就在这里:Init2
l = &Node{
5,
root,
nil,
nil,
}
在此行中,您将覆盖,它不会更改提供给节点的值。lroot
而是更改指针基础的值:
*l = Node{
5,
root,
nil,
nil,
}
为此,您需要初始化,例如使用new(Node):l
l := new(Node)
更改最少的工作示例:https://play.golang.org/p/idLimW79m5c
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消