pointers - 为什么我会得到无效的内存地址或 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]
解决方案
如果d
以非零开头,并且 if v == d.key
,那么您设置d=nil
,并且之后的第一个 if 语句将失败。
推荐阅读
- c - 如何通过单个 fork() 调用使子进程保持活动状态?
- c++ - std::regex 对于用户定义的表达式是否安全?
- css - css 伪选择器中 :nth-child(1) 与 :first-child 之间有什么区别 选择一种方法而不是另一种方法有什么优点?
- java - 为什么发布请求会导致禁止错误?
- python - 如何将此代码写入单行命令
- apache - 为什么在 Ubuntu 中有几个 PHP 进程?
- sql - 根据佣金日期从报告中删除行
- python - Differences between declaring a list & appending and list()
- security - 公司代理背后:npm i => 证书链中的自签名证书
- python - 具有困难 JSON 的 Python PUT 请求