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

GoLang:在函数中分配切片导致索引超出范围

GoLang:在函数中分配切片导致索引超出范围

Go
慕工程0101907 2021-06-26 11:17:40
我一直在用 Go 尝试一些东西,但遇到了一个我无法弄清楚的问题。package mainimport "fmt"import "strconv"func writeHello(i int, ) {        fmt.Printf("hello, world "+strconv.Itoa(i)+"\n")}type SliceStruct struct {    data [][]int;}func (s SliceStruct) New() {    s.data=make([][]int,10);}func (s SliceStruct) AllocateSlice(i int) {    s.data[i]=make([]int,10);}func (s SliceStruct) setData(i int, j int, data int) {    s.data[i][j] = data;}func (s SliceStruct) getData(i int, j int) int {    return s.data[i][j]}func useSliceStruct(){    sliceStruct := SliceStruct{};    sliceStruct.New();    for i := 0; i < 10; i++ {        sliceStruct.AllocateSlice(i);        for j:=0; j<10; j++ {             sliceStruct.setData(i,j,i);            writeHello(sliceStruct.getData(i,j));        }    }}func dontUseSliceStruct(){    data:=make([][]int,10);    for i := 0; i < 10; i++ {        data[i]=make([]int,10);        for j:=0; j<10; j++ {            data[i][j] = i;            writeHello(data[i][j]);        }    }}func main() {    dontUseSliceStruct();    useSliceStruct();}当它到达函数 useSliceStruct 时,代码在第一次调用 AllocateSlice() 时失败,并出现索引超出范围错误。据我所知,这两种方法的代码做了相同的事情。那么我错过了什么?
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

DOH,刚刚解决了。

我没有在函数声明中使用对结构的引用。

func (s SliceStruct)

本来应该

func (s *SliceStruct)


查看完整回答
反对 回复 2021-06-28
  • 1 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信