首页 > 解决方案 > 为什么我会得到无效的内存地址或 nil 指针取消引用?

问题描述

我在 Go 中创建了一个 BST,但我的删除功能不起作用。你能告诉我问题出在哪里吗

func delete(d *Node, v int) {
    if v == d.key {
        fmt.Println(d.left)
        fmt.Println("Deleted")
        d = nil
    }
    if v < d.key {
        delete(d.left, v)
    }
    if v > d.key {
        delete(d.right, v)
    }
}

错误:

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

标签: pointersgo

解决方案


如果d以非零开头,并且 if v == d.key,那么您设置d=nil,并且之后的第一个 if 语句将失败。


推荐阅读