잘못된 메모리 주소에 대한 런타임 오류가 발생합니다.예기치 않은 잘못된 메모리 주소 또는 nil 포인터 참조 취소
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x4e0f24]
goroutine 1192592 [running]:
panic(0x793540, 0xc420010040)
#011/usr/local/go/src/runtime/panic.go:500 +0x1a1
foobar/sd.(*Channel).Attributes(0x0, 0xc420110101, 0xc42278f9b0, 0x9)
#011/home/app/go/src/foobar/sd/channel.go:36 +0x54
channel.go은 다음과 같습니다
35 func (m *Channel) Attributes() (*ChannelAttrs, error) {
36 redisHash := "sd:channels:" + m.hash
37
38 rc := m.ctx.RedisPool.Get()
39 values, err := redis.Values(rc.Do("HGETALL", redisHash))
40 rc.Close()
41 if err != nil {
42 return nil, err
43 }
44 attrs := ChannelAttrs{}
45 redis.ScanStruct(values, &attrs)
46 return &attrs, nil
47 }
어떻게이 선 (36)이 원인이되는 것이 가능하다? 어떻게 든 m
을 0으로 설정할 수 있습니까? 그렇다면 어떻게?
참고 : 해시 이것은 Attributes
이 nil
같은 수신기 m
호출되고 있음을 의미 문자열
이를 호출하는 코드에서'm''nil'인가? – abligh
잘 모르겠습니다. 프로덕션 코드에서는 거의 발생하지 않습니다. 나는 그것을 복제하는 방법을 찾지 못했습니다. m이 이동 중에는 0이 될 수도 있습니까? –
누락되었습니다. [업데이트 됨] – patilnitin