教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Go invalid memory address or nil pointer dereference错误

Go invalid memory address or nil pointer dereference错误

发布时间:2023-03-16   编辑:jiaochengji.com
教程集为您提供Go invalid memory address or nil pointer dereference错误等资源,欢迎您收藏本站,我们将为您提供最新的Go invalid memory address or nil pointer dereference错误资源

很多朋友在使用GO指针的时候,出现 panic: runtime error: invalid memory address or nil pointer dereference,这其实是典型的Go 指针声明后没有对指针先初始化而直接赋值导致的错误。

0xc00009a008 <nil>

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1092f9c]

错误示例及原因解释

package main

func main() {
    //初始化指针,指针有了自己的地址(指针地址),但还没有值的地址(值地址),即i为nil
	var i *int
    //*i代表取i指向的值,那既然i为nil,那对空地址取值,肯定会报错。
	*i = 1
}

解决办法

new初始化值的内存地址,预先分配一个内存地址到指针。

package main

func main() {
	var i *int
	i = new(int)
        *i=1
}

总结

指针,也称为指针变量,存储了一个值的内存地址,我们称之为“值地址”,而指针自己本身也有地址的,我们称之为“指针地址”。

熟练使用指针,我们要理清与指针相关的三个概念,以及两个运算符*和&
三个概念:指针地址,值地址(也就是指针),值地址指向的值。

假设i为指针,那&i为“指针地址”,i为“值地址”或“指针”,*i为“值地址指向的值”,三者以指针i为中枢,构成了一个前中后的关系。

定义一个指针,才最先有指针地址,然后初始化值地址,才有了值地址,这时候才能对值地址进行赋值,很多朋友忘了中间这步,所以就导致报错,下次赋值之前要先初始化值地址哦

到此这篇关于“Go invalid memory address or nil pointer dereference错误”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang 面试题(十三)interface内部结构和nil详解
【golang】nil的理解
理解 Go 语言中的 panic 输出
golang中类型比较和类型赋值说明
Go 方法接收器与接口
Go 中 defer 的 5 个坑 - 第一部分
golang 初始化并赋值_Golang | 既是接口又是类型,interface是什么神仙用法?
Golang 网络编程丝绸之路 - TCP/UDP 地址解析
Golang之struct能不能比较
golang 面试

[关闭]
~ ~