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

Golang 索引超出范围

Golang 索引超出范围

Go
慕盖茨4494581 2021-12-27 17:53:48
我正在尝试制作一个简单的 Golang 示例。该示例位于 golang 之旅的 te 36º 页面中。这是我的代码:package mainimport "code.google.com/p/go-tour/pic"import "fmt"func Pic(dx, dy int) [][]uint8 {    dx8 := uint8(dx)    s1 := make ([][] uint8, dy)    fmt.Printf("%d\n", len(s1), cap(s1))    for i := range s1{        fmt.Printf("%d\n",i)        for j := range s1 {            fmt.Printf("%d\n",j)            s1[i][j] = dx8            }    }    return s1}func main() {    pic.Show(Pic)}我得到的错误是:    256%!(EXTRA int=256)00panic: runtime error: index out of rangegoroutine 1 [running]:panic(0x18b820, 0x1040a010)    /usr/local/go/src/runtime/panic.go:464 +0x700main.Pic(0x100, 0x100, 0x0, 0x0, 0x0, 0x0)    /tmp/sandbox716191956/main.go:17 +0x4e0code.google.com/p/go-tour/pic.Show(0x1d7988, 0x104000e0)    /go/src/code.google.com/p/go-tour/pic/pic.go:20 +0x60main.main()    /tmp/sandbox716191956/main.go:26 +0x20Program exited.我只想返回一个Show函数使用的双向切片。
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您需要对图片的两个维度 dy 和 dx 进行切片。例如,


package main


import "golang.org/x/tour/pic"


func Pic(dx, dy int) [][]uint8 {

    p := make([][]uint8, dy)

    for i := range p {

        p[i] = make([]uint8, dx)

        for j := range p[i] {

            p[i][j] = uint8(i * j)

        }

    }

    return p

}


func main() {

    pic.Show(Pic)

}


查看完整回答
反对 回复 2021-12-27
?
繁星coding

TA贡献1797条经验 获得超4个赞

您在第二个循环中以错误的大小循环的代码中的问题。你的第二个范围必须是 sieze of s1[i]nots1因为第二个循环处理内部维度。


for i := range s1{

    fmt.Printf("%d\n",i)

    s1[i] = make ([] uint8, dy)

    for j := range s1[i] {

        fmt.Printf("%d\n",j)

        s1[i][j] = dx8


    }

}


查看完整回答
反对 回复 2021-12-27
  • 2 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

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