我是靠谱客的博主 耍酷向日葵,最近开发中收集的这篇文章主要介绍Go 指针声明后赋值,出现 panic: runtime error: invalid memory address or nil pointer dereference,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
指针基础知识
package main
import "fmt"
func main() {
var p *int
p = new(int)
*p = 1
fmt.Println(p, &p, *p)
}
//输出: 0xc04204a080 0xc042068018 1
- 在
Go
中*
代表取指针地址中存的值,&
代表取一个值的地址 - 对于指针,我们一定要明白指针储存的是一个值的地址,但本身这个指针也需要地址来储存
- 如上
p
是一个指针,他的值为内存地址0xc04204a080
- 而
p
的内存地址为0xc042068018
- 内存地址
0xc04204a080
储存的值为1
- 如上
地址 | 0xc042068018 (&p ) | 0xc04204a080 (p ) |
---|---|---|
值 | 0xc04204a080 (p ) | 1 (*p ) |
错误实例
在 golang
中如果我们定义一个指针并像普通变量那样给他赋值,例如下方的代码
package main
import "fmt"
func main() {
var i *int
*i = 1
fmt.Println(i, &i, *i)
}
就会报这样的一个错误
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x1 addr=0x0 pc=0x498025]
报这个错的原因是 go
初始化指针的时候会为指针 i
的值赋为 nil
,但i
的值代表的是 *i
的地址, nil
的话系统还并没有给 *i
分配地址,所以这时给 *i
赋值肯定会出错
解决这个问题非常简单,在给指针赋值前可以先创建一块内存分配给赋值对象即可
package main
import "fmt"
func main() {
var i *int
i = new(int)
*i = 1
fmt.Println(i, &i, *i)
}
转自:https://blog.csdn.net/qq_36431213/article/details/82967982
最后
以上就是耍酷向日葵为你收集整理的Go 指针声明后赋值,出现 panic: runtime error: invalid memory address or nil pointer dereference的全部内容,希望文章能够帮你解决Go 指针声明后赋值,出现 panic: runtime error: invalid memory address or nil pointer dereference所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复