【问题标题】:Appending a pointer to a Slice in Golang在 Golang 中附加一个指向切片的指针
【发布时间】:2016-12-28 16:19:26
【问题描述】:

我想附加一个指向切片的指针。这可能吗..?在 Partentnode.children 是一个切片中,我想用 X 作为指针附加它。

https://play.golang.org/p/ghWtxWGOAU

func Tree(Parentnode *Node) {
    if IsvisitedNode(Parentnode.currentvalue - 1) {
        m := MovesArray[Parentnode.currentvalue-1]
        for j := 0; j < 8; j++ {
            if m[j] != 0 {
                var X *Node
                X.parentnode = Parentnode
                X.currentvalue = m[j]
                if IsvisitedNode(m[j]) {
                    Parentnode.children = append(Parentnode.children, *X)
                    Tree(X)
                }
            }
        }
    }
}

【问题讨论】:

  • 索引 j 在切片 m 中不存在。我会添加一些打印语句,看看哪里出错了..
  • 另外,for j := 0; j &lt; 8; j++ { -> m[j] 如果您不确定m 有8 个或更多索引,则会自找麻烦。更好的是for currval := range m {
  • 在变量 m 中肯定有 8 个值,包括负位置的零,这就是我包含语句 m[j]!=0 的原因。 @RickyA

标签: variables pointers go slice


【解决方案1】:

您有一个错误。 主要设置Y.currentvalue = 1。 然后在Tree currentvalue 走到64

X.currentvalue = m[j]
fmt.Printf("cv: %v\n",X.currentvalue) //walks to 64
if IsvisitedNode(m[j]) {

IsvisitedNode 中,您针对具有 64 个索引的 visithistory 测试该索引,因此在索引 63 处停止。-> 索引错误

var visithistory [64]bool

func IsvisitedNode(position int) bool {
    if visithistory[position] == true {

如果您设置var visithistory [65]bool,一切正常,但我认为您需要重新考虑这里的逻辑。

【讨论】:

  • 这就是我将 currentvalue-1 用于 IsVisitedNode 函数的原因。 @RickyA
  • 我确实尝试过,但程序在仅打印三个值后退出。
  • 女巫最后一个是 64,这不是 visithistory 中的有效索引,因为最后一个索引是 63。
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2019-07-18
  • 2015-05-01
  • 2021-05-03
  • 2021-09-01
  • 2015-02-21
相关资源
最近更新 更多