我正在通過Go語言遊的練習中工作,並且遇到了一個我無法弄清楚的障礙。我在做Exercise: Slices
和我收到此錯誤:Go Tour,Excercise:切片索引超出範圍
256 x 256
panic: runtime error: index out of range
goroutine 1 [running]:
main.Pic(0x10000000100, 0x3, 0x417062, 0x4abf70)
/tmpfs/gosandbox-08a27793_4ffc9f4a_3b917355_ef23793d_c15d58cc/prog.go:9 +0xa0
tour/pic.Show(0x400c00, 0x40caa2)
go/src/pkg/tour/pic/pic.go:20 +0x2d
main.main()
/tmpfs/gosandbox-08a27793_4ffc9f4a_3b917355_ef23793d_c15d58cc/prog.go:20 +0x25
這裏是我的代碼:
package main
import "tour/pic"
func Pic(dx, dy int) [][]uint8 {
fmt.Printf("%d x %d\n\n", dx, dy)
pixels := make([][]uint8, 0, dy)
for y := 0; y < dy; y++ {
pixels[y] = make([]uint8, 0, dx)
for x := 0; x < dx; x++ {
pixels[y][x] = uint8(x*y)
}
}
return pixels
}
func main() {
pic.Show(Pic)
}
對於我的生活,我不能找到問題!
所以使([] UINT8,DX)使得在它DX零分得一杯羹?如果這種情況與容量不同,情況如何?我的意思是如果我確定([] uint8,0,dx)不會創建一個可以容納dx uint8s的片段,但我們目前是空的? – CaseyB 2012-07-20 20:02:32
看到我的答案。 'make([] uint8,dx)'相當於'make([] uint8,dx,dx)'即len()= dx和cap()= dx,它與'make([] uint8 ,0,dx)'即len()= 0,cap()= dx。在這兩種情況下,底層數組都是cap()= dx零值元素。索引必須爲0 <= i
peterSO
2012-07-20 20:34:20