Почему я получаю неверный адрес памяти или разыменование нулевого указателя? - PullRequest
0 голосов
/ 19 сентября 2019

Я создаю BST в Go, но моя функция удаления не работает.Можете ли вы точно сказать мне, где проблема

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]

Ответы [ 2 ]

4 голосов
/ 19 сентября 2019

Если d не ноль для начала, а если v == d.key, то вы устанавливаете d=nil, и первый оператор if после этого завершится неудачей.

0 голосов
/ 20 сентября 2019

Вы можете изменить свою функцию к этому, я предполагаю, что вы уже выполнили проверку nil, т.е. если только d! = Nil, то вызовите функцию удаления.

    func delete(d *Node, v int) {
    if v == d.key {
        fmt.Println(d.left)
        fmt.Println("Deleted")
        d = nil
        return
    }
    if v < d.key {
        delete(d.left, v)
        return
    }
    if v > d.key {
        delete(d.right, v)
        return
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...