1 개요[ | ]
- runtime error: invalid memory address or nil pointer dereference
- panic: runtime error: invalid memory address or nil pointer dereference
- nil 포인터의 내용에 접근하려고 하면 panic
- panic을 피하려면 nil이 아닌지 확인하고 nil이 아닌 경우에만 접근해야 한다.
2 예제 1[ | ]
Go
CPU
-1.0s
MEM
-0M
-1.0s
Copy
package main
import "fmt"
func main() {
var n *int
fmt.Println(*n)
}
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x480fdc] goroutine 1 [running]: main.main() /home/user01/runbox.go:7 +0x1c exit status 2
3 예제 2[ | ]
Go
Copy
package main
import "fmt"
type Point struct {
X, Y float64
}
func main() {
var p *Point
fmt.Println(p.X) // panic: runtime error: invalid memory address or nil pointer dereference
}
Loading
4 예제 3[ | ]
Go
Copy
package main
import (
"encoding/json"
"fmt"
)
type MyObject struct {
ID int `json:"id"`
Name string `json:"name"`
DisplayName *string `json:"displayName"`
}
func main() {
var myObject1, myObject2 MyObject
_ = json.Unmarshal([]byte(`{"id":1,"name":"hello","displayName":"hello everyone"}`), &myObject1)
_ = json.Unmarshal([]byte(`{"id":2,"name":"world","displayName":nil}`), &myObject2)
fmt.Printf("%+v\n", myObject1) // {ID:1 Name:hello DisplayName:0xc000010350}
fmt.Printf("%+v\n", myObject1.DisplayName) // 0xc000010350
fmt.Printf("%+v\n", *myObject1.DisplayName) // hello everyone
fmt.Printf("%+v\n", myObject2) // {ID:0 Name: DisplayName:<nil>}
fmt.Printf("%+v\n", myObject2.DisplayName) // <nil>
fmt.Printf("%+v\n", *myObject2.DisplayName) // ★ panic: runtime error: invalid memory address or nil pointer dereference
}
Loading
5 같이 보기[ | ]
- Go 문자열 포인터
- Observed a panic: "invalid memory address or nil pointer dereference" (runtime error: invalid memory address or nil pointer dereference)
6 참고[ | ]
편집자 Jmnote
로그인하시면 댓글을 쓸 수 있습니다.