为了账号安全,请及时绑定邮箱和手机立即绑定

如何预测GC的行为

如何预测GC的行为

Go
莫回无 2022-08-09 20:18:15
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


查看完整回答
反对 回复 2022-08-09
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号