gpt4 book ai didi

arrays - 即使初始化也没有指针取消引用

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:09 24 4
gpt4 key购买 nike

我的目标是声明一个空的二维数组,然后在每次 do() 运行时对其进行初始化并填充值。问题是即使我正在初始化数组,我也会得到一个 nil 指针取消引用。

这是我试图在服务器模拟器上完成的一个简单版本。

package main

import "fmt"


type Srv struct {
A *[][]int
}

func (s Srv) init() {
arr := make([][]int, 0)
*s.A = arr
}

func main() {
s := Srv{nil}
s.init()
printSlice(*s.A)
do(s.A)
do(s.A)


}

func printSlice(s [][]int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

func do(s *[][]int) {
*s = append(*s, make([]int, 0))
printSlice(*s)

(*s)[0] = append((*s)[0], 5)
(*s)[0] = append((*s)[0], 6)

*s = append(*s, make([]int, 0))
printSlice(*s)
}

我希望得到类似 [ [5 6 5 6] [] [] [] ] 的输出,但我得到的是 nil 指针取消引用。

最佳答案

在 init 执行 *s.A = 的地方,它解引用了一个 nil 指针。 s.A 此时尚未初始化(即,它是 nil),* 是取消引用运算符。但这只是一个问题,因为它一开始就不必要地复杂化。它应该只是:

func (s Srv) init() {
s.A = make([][]int, 0)
}

关于arrays - 即使初始化也没有指针取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56587923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com