首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试复制时的boltdb意外错误地址

尝试复制时的boltdb意外错误地址
EN

Stack Overflow用户
提问于 2019-01-11 09:15:00
回答 1查看 619关注 0票数 0

我有下面的节目。

代码语言:javascript
复制
package main

import (
    "fmt"
    "log"

    "github.com/boltdb/bolt"
)

const dbFile = "testbolt.db"
const testBucket = "test"

func main() {
    db, err := bolt.Open(dbFile, 0600, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    err = db.Update(func(tx *bolt.Tx) error {
        _, err := tx.CreateBucketIfNotExists([]byte(testBucket))
        if err != nil {
            return err
        }
        return nil
    })
    if err != nil {
        log.Fatal("1", err)
    }

    err = db.Update(func(tx *bolt.Tx) error {
        b := tx.Bucket([]byte(testBucket))
        err := b.Put([]byte("l"), []byte("writesomething"))
        return err
    })
    if err != nil {
        log.Fatal("2", err)
    }

    var lastSth []byte
    var lastSthCopy []byte
    err = db.View(func(tx *bolt.Tx) error {
        b := tx.Bucket([]byte(testBucket))
        lastSth = b.Get([]byte("l"))
        fmt.Printf("lastSth %s@%p\n", lastSth, lastSth)
        lastSthCopy = make([]byte, len(lastSth))
        copy(lastSth, lastSthCopy) // this line fails.
        fmt.Printf("lastSth:%s@%p, lastSthCopy:%p\n", lastSth, lastSth, lastSthCopy)

        return nil
    })
    if err != nil {
        log.Fatal("3", err)
    }
}

虽然打印lastSth字节片的地址和值很好,但是将值复制到另一个字节片会出现以下错误。

代码语言:javascript
复制
lastSth writesomething@0xc94055
unexpected fault address 0xc94055
fatal error: fault
[signal 0xc0000005 code=0x1 addr=0xc94055 pc=0x4549de]

请给我建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-11 12:15:13

查看签名以获得copy():

代码语言:javascript
复制
func copy(dst, src []Type) int

你目前有:

代码语言:javascript
复制
copy(lastSth, lastSthCopy) // copies lastSthCopy (src) to lasSth (dst)

我想你把dst和src倒过来了。你可能是说:

代码语言:javascript
复制
copy(lastSthCopy, lastSth)

这修复了错误。将[]字节复制到螺栓的[]字节会导致内存错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54143430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档