首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析无效的内存地址或nil指针取消引用

解析无效的内存地址或nil指针取消引用
EN

Stack Overflow用户
提问于 2013-09-12 06:46:07
回答 2查看 12.6K关注 0票数 1

把我的头撞在这上面。我无法获得分配给结构的HTTP响应。

我的structs设置如下:

代码语言:javascript
复制
type DataConnect struct {
    Response *Response
}

type Response struct {
    response []byte
    errors   []string
}

然后有问题的函数的布局是这样的(为了可读性进行了修剪):

代码语言:javascript
复制
137 func (d *DataConnect) send() bool {

    ...

154    out, err := ioutil.ReadAll(resp.Body)
155    if err != nil {
156        fmt.Println(err)
157    }
158
159    fmt.Printf("%s\n", out) // THIS WORKS
160    d.Response.response = out // THIS DOES NOT WORK
161 }

这样做会导致以下错误:

代码语言:javascript
复制
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x36532]

goroutine 1 [running]:
github.com/DataConnect.(*DataConnect).send(0xc2000af4a0, 0x232a00)
github.com/DataConnect/DataConnect.go:160 +0xc22

现在,如果我将DataConnect.Response.response更改为interface{}类型,我可以成功地保存到它,但是我需要在[]byte中保存它,因为稍后我将对内容执行json.Unmarshal。

有没有人知道为什么这不起作用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-12 07:46:55

我怀疑在第160行,d要么是零,要么是d.Response是零。如果这是真的,你需要决定这是否合适,如果不合适,就修改你的代码。

票数 2
EN

Stack Overflow用户

发布于 2013-09-12 08:08:54

我怀疑@alex是正确的,将您的代码更改为查找nil的代码(从第159行开始):

代码语言:javascript
复制
        fmt.Printf("%s\n", out) // THIS WORKS
        if d != nil && d.Response != nil {
           d.Response.response = out // THIS DOES NOT WORK
        } else {
           // appropriate error logging and handling
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18752544

复制
相关文章

相似问题

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