sangcs 2023-04-15 03:20 采纳率: 100%
浏览 16
已结题

golang 语言问题


package main

import "fmt"

type HeroNode struct {
    no    int
    name  string
    name2 string
    next  *HeroNode
}

func InsertHeroNode2(head *HeroNode, newNode *HeroNode) {
    tempNode := head
    flag := true
    for {
        if tempNode.next == nil {
            break
        } else if tempNode.next.no > newNode.next.no {
            break
        } else if tempNode.next.no == newNode.next.no {
            flag = false
            break
        }
        tempNode = tempNode.next
    }
    if !flag {
        fmt.Println("对不起,不允许插入...")
        return
    }
    newNode.next = tempNode.next
    tempNode.next = newNode
}

func ListHero(head *HeroNode) {
    temp := head
    if temp.next == nil {
        fmt.Println("这个链表是空链表....")
        return
    }

    for {
        fmt.Printf("[%d, %s, %s] == >", temp.next.no,
            temp.next.name, temp.next.name2)
        temp = temp.next
        if temp.next == nil {
            break
        }
    }
}
func main() {
    head := &HeroNode{}
    hero1 := &HeroNode{
        no:    1,
        name:  "aaa",
        name2: "aaa",
    }
    hero2 := &HeroNode{
        no:    2,
        name:  "bbb",
        name2: "bbb",
    }
    hero3 := &HeroNode{
        no:    3,
        name:  "ccc",
        name2: "ccc",
    }
    InsertHeroNode2(head, hero3)
    InsertHeroNode2(head, hero1)
    InsertHeroNode2(head, hero2)
    ListHero(head)
}

想制作个按顺序排列的单链表,以下是错误,报的错误找了半天没找到,求指点。


panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x49849b]

goroutine 1 [running]:
main.InsertHeroNode2(0xc042061f40, 0xc042078060)
        D:/goproject/src/go_code/aaa_test001/link/main.go:29 +0x4b
main.main()
        D:/goproject/src/go_code/aaa_test001/link/main.go:79 +0x19a
exit status 2
  • 写回答

2条回答 默认 最新

  • Vayne16 2023-04-15 08:07
    关注

    该回答引用GPT:
    这段代码中出现了nil指针解引用错误,看出错信息可以知道是在InsertHeroNode2函数的第29行导致的。在这一行,程序试图访问tempNode.next,但是tempNode可能为nil,也就是head为空,因此报错。解决方法是在main函数中创建头节点head来初始化链表。具体方法是:

    head := &HeroNode{}
    

    这样就创建了一个头节点,就不会出现nil指针解引用错误了。在后续的代码中,对于没有节点的情况应该加以判断,例如ListHero函数中判断链表是否为空链表,避免出现类似的错误。
    如还有疑问,可留言帮助解决。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 4月15日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP