如何预测GC的行为

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()


莫回无
浏览 93回答 1
1回答

胡说叔叔

如果你想开始工作,问题就在这里:Init2    l = &Node{        5,        root,        nil,        nil,    }在此行中,您将覆盖,它不会更改提供给节点的值。lroot而是更改指针基础的值:    *l = Node{        5,        root,        nil,        nil,    }为此,您需要初始化,例如使用new(Node):ll := new(Node)更改最少的工作示例:https://play.golang.org/p/idLimW79m5c
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go