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
答案 0 :(得分:6)
错误在于:
var x *list.List
您声明指向list.List
的指针,而不创建它的实例。 x
的初始值为nil
。要使代码正常工作,请将行更改为:
x := list.New()