紧急情况:运行时错误:索引超出范围[0],长度为0

过度交易:

对于以下代码:

func Insert(m []Bucket, key string, value float64) {

    bucketNumber := (key[0] - 'A') / 7

    if cap(m[bucketNumber]) == 0 {
        m[bucketNumber] = make([]Entry, 0, 100)
    }

    var bucketFull bool
    bucketFull = len(m[bucketNumber]) == cap(m[bucketNumber])

    if bucketFull {

        m[bucketNumber] = append(m[bucketNumber], Entry{key, value})
    } else {

        m[bucketNumber][emptyPosition[bucketNumber]] = Entry{key, value}
    }
    emptyPosition[bucketNumber]++
}

m[bucketNumber][emptyPosition[bucketNumber]] = Entry{key, value} 给出错误

紧急:运行时错误:索引超出范围[0],长度为0`

尽管 m[bucketNumber] = make([]Entry, 0, 100)

为什么分配失败并出现运行时错误?

icza:

make([]Entry, 0, 100) 创建一个切片,该切片的长度为0,容量为100。索引必须小于长度。

因此,如果长度为0,则偶数索引0超出范围。

如果要创建包含100个元素的切片,请使用

make([]Entry, 100, 100)

或者简单地

make([]Entry, 100)

当您将元素附加到切片时,第三个参数(容量)用于减少将来的分配。

如果确实要创建长度为0的切片,请使用内置append()函数向切片添加元素,例如:

s := make([]int, 0, 10)
s = append(s, 1)

您的具体问题:

bucketFull = len(m[bucketNumber]) == cap(m[bucketNumber])

这仅检查长度是否等于容量。对于新分配的切片(带有make([]Entry, 0, 100)),这显然是false0不等于100),但这并不意味着您可以分配给切片的元素。如前所述,索引必须小于长度。

bucketFull属性仅指示是否可以在不重新分配的情况下将新元素添加到切片。可以使用内置append()函数来添加新元素,或者使用内置函数append()或切片表达式来对切片进行切片。

阅读博客文章以了解切片和数组:

Go Blog:Go Slices:用法和内部原理

Go博客:数组,切片(和字符串):“追加”的机制

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

紧急:运行时错误:索引超出范围1

紧急:运行时错误:索引超出范围

当我尝试启动 minikube 时,我收到错误消息“运行时错误:索引超出范围 [0],长度为 0”

Golang,goroutines:紧急情况:运行时错误:无效的内存地址

在打印/访问超出范围的切片索引时不会出现紧急情况

紧急:运行时错误:索引超出范围[已恢复]

紧急:运行时错误:Go中的索引超出范围

紧急情况:运行时错误:运行Blockchainr时无效的内存地址或nil指针取消引用

紧急情况:运行时错误:无效的内存地址或nil指针取消引用|| 人体模型

在GAE下使用http.Server时运行时出现紧急情况

防止bson.ObjectIdHex中的运行时出现紧急情况

在SDL Go程序中复制纹理时运行时出现紧急情况

当运行时出现紧急情况时,堆栈/堆分配的类型会怎样?

当数组的长度不为null时,请执行“ panic:运行时错误:索引超出范围”

在主块中捕获到错误后,程序会出现紧急情况。紧急:运行时错误:无效的内存地址或nil指针取消引用

紧急:运行时错误:切片范围超出范围

Hyperledger Fabric:紧急情况:运行时错误:在fabric / peer / common.NewPeerClientForAddress处无效的内存地址或nil指针取消引用

紧急情况:运行时错误:无效的内存地址或具有更大数据的nil指针取消引用

紧急情况:运行时错误:在拆分应用程序时无效的内存地址或nil指针取消引用

使用xlsx软件包出现紧急情况:运行时错误:无效的内存地址或nil指针取消引用Go

恐慌:运行时错误:索引超出范围处理文件

运行时错误:尝试os.StartProcess时索引超出范围

Golang解组数组给出运行时错误:索引超出范围

在 go 中转换数据结构:恐慌:运行时错误:索引超出范围

golang上传文件err运行时错误索引超出范围

运行时错误“ 9”:下标超出范围

VBA运行时错误“ 9”下标超出范围

下标超出范围运行时错误9

运行时错误'1004'指定的值超出范围