在Golang中向后推送导致程序崩溃

时间:2014-05-16 04:06:22

标签: go

func extract_word(r rune) bool {
    return !unicode.IsLetter(r)
}
type kv_string_value struct {
    str string
    num int
}

func Map(value string) *list.List {

    t := strings.FieldsFunc(value, extract_word)
        fmt.Println("t:", len(t))
        m := make(map[string]int)
    for _, word  := range t{
            m[word]++   
    }
    var x *list.List

        for k,v := range m {
        pair := kv_string_value{}
                pair.str = k
                pair.num = v
        x.PushBack(pair)
        fmt.Println("Good5")
    }

    return x
}

这有什么问题" x.PushBack(对)"

它只是将一对推回到一个列表,为什么它会崩溃我的程序? 需要帮忙。 谢谢!

  /main$ go run wc.go master kjv12.txt sequential
    # command-line-arguments
    ./wc.go:34: *x.PushBack(pair) evaluated but not used
  main$ go run wc.go master kjv12.txt sequential
    Split kjv12.txt
    name is mrtmp.kjv12.txt-0
    DoMap: read split mrtmp.kjv12.txt-0 966967
    Read succesful.
    t: 160040
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal 0xb code=0x1 addr=0x0 pc=0x444c25]

    goroutine 1 [running]:
    runtime.panic(0x6874a0, 0x9c5a48)
        /usr/lib/go/src/pkg/runtime/panic.c:266 +0xb6
    container/list.(*List).lazyInit(0x0)
        /usr/lib/go/src/pkg/container/list/list.go:86 +0x5
    container/list.(*List).PushBack(0x0, 0x68ce20, 0xc210084240, 0x2)
        /usr/lib/go/src/pkg/container/list/list.go:138 +0x27

1 个答案:

答案 0 :(得分:6)

错误在于:

var x *list.List

您声明指向list.List的指针,而不创建它的实例。 x的初始值为nil。要使代码正常工作,请将行更改为:

x := list.New()