panic: runtime error: index out of range [0] with length 0 goroutine 1 [running]: 数组越界的常犯错误统计

golang报错的常见问题数组越界与解决方法: panic: runtime error: index out of range [0] with length 0 goroutine 1 [running]:

go语言出现数组越界的情况:

- 一维数组越界:常出现于for循环,在通过len()计算数组长度时

此处的i-1中,没有确定好边缘值/特殊值出现错误

 - for i:=0;i<len(array);i++{
 - 	 if array[i-1]<array[i]{....}		//此处的i-1中,没有确定好边缘值/特殊值出现错误
 - }
 

- 多维数组越界

多维数组越界,不仅会有前面一维数组的错误外,还存在着一下两种错误:

第一种:

panic: runtime error: index out of range [0] with length 0 goroutine 1 [running]:

	a :=make([][]int ,4)
	a[0][0]=1
	fmt.Println(a[0][0])

解决方法:
在第一句后添加

for i:=0;i<4;i++{
		a[i]=make([]int,4)
	}

即:

a :=make([][]int ,4)
	for i:=0;i<4;i++{
		a[i]=make([]int,4)
	}
	a[0][0]=1
	fmt.Println(a[0][0])

原因,go语言的空间机制,没有给一维切片赋值,故为了节约空间,减少空间资源的浪费而造成的,其中的4只是个例子

第二种:

fatal error: out of memory

runtime stack:
runt ime. throw (0x4f8f1d, 0xd)
panic. go,line 774
runtime. largeAlloc (0x32ca0,0x450101, 0xc03ffae000)
malloc. go,line 1140
runtime. mallocgc. func1 (
malloc. go, line 1033
runtime. systemstack (0x452ca4)
/usr/ local/go/ src/runtime/asm_ amd64. s:370 +0x66
runtime. mstart()
proc. go,line 1146
runt ime. systemstack_ switch()
/usr/ local/ go/ src/runt ime/asm_ amd64. s:330 fp=0xc000060c30 sp=0xc000060c28 pc=0x452da0
runtime. mallocgc (0x32ca0,0x4ce820, 0x454c01, 0xc03ffae000)
malloc. go,line 1032
runtime. makeslice (0x4ce820,0x6594, 0x6594, 0xc03ffae000)
slice. go,line 49
main. maxProfit (0xc000946000,0x6594, 0x6aae, 0x4c8940)
solution. go,line 38
main._ helper_ (… )
solution. go, line 59
main. main()
solution. go, line 87
runtime. main()
proc. go,line 203
runtime. goexit()
/usr/1ocal/ go/src/runtime/asm_ amd64. s:1357 +0x1 fp=0xc000060fe8 sp=0xc000060fe0 pc=0x454cf1
runtime: out of memory: cannot allocate 212992-byte block (1073479680 in use)

简单概述就是,资源调用过大,一般是刷题/测试,或者编辑器资源分配不够时出现的情况(一般都是自己问题)

这里需要自己调整,该多维数组,是否是内存使用过度的问题,问题多出现在for循环内,多为以下情况

for i:=0;i<len(a);i++{
		a[i]=make([]int,len(a))
	}

这语句没问题,但是可能数组a过长,而建立的二维数组过大导致的,一般将创建的二维数组这语句改为一个确切的(比较小的)值即可

for i:=0;i<len(a);i++{
		a[i]=make([]int,4))
	}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值