Pointers 一片指针的指针在进行操作时惊慌失措

Pointers 一片指针的指针在进行操作时惊慌失措,pointers,go,slice,Pointers,Go,Slice,我有以下代码: var ANIMATIONS *[]*SDL.Animable .... func main() { *ANIMATIONS = make([]*SDL.Animable, 0, 100) 但它在奔跑时会惊慌失措。什么是正确的初始化方法 错误: panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation

我有以下代码:

var ANIMATIONS *[]*SDL.Animable

....

func main() {
    *ANIMATIONS = make([]*SDL.Animable, 0, 100)
但它在奔跑时会惊慌失措。什么是正确的初始化方法

错误:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x4afe3a]

goroutine 1 [running, locked to thread]:
main.main()
要修复此问题,您需要:

s := make([]*SDL.Animable, 0, 100)

ANIMATIONS = &s
您的代码之所以恐慌,基本上是因为您取消了对零指针的引用(
*ANIMATIONS
)。您需要获取一个引用变量来存储新切片&然后您可以获取它的地址(
&s
)并将其存储在指针中


注意:以下操作将不起作用
&make([]*SDL.Animable,0,100)
-因为您无法获取返回结果的地址-因此需要存储结果并获取其地址。

对于给出的答案,非常少需要指向切片的指针;创造一个(相对于通过一个)更为罕见。再次访问为什么您认为您的变量应该是指针。此外,所有caps标识符名称都不是惯用的Go。@DaveC感谢您的评论Dave。问题是我需要把这个片段传递给一个函数,这个函数反过来会把它传递给另一个函数,后者会给它添加一些动画。当我尝试在不使用指针的情况下使用append时,更改不会反映为通过copy传递的更改。@DaveC如果您能向我展示一个示例,说明如何在不需要指针的情况下附加到已传递的切片,我将非常感激如果“需要将此切片传递给函数”,那么我将采用您的
var foo[]*Thing
并将其作为
someFunctionWantingASlicePointer(&foo)
传递。请注意,我在评论中区分了“创建一个”和“传递一个”。@DaveC谢谢。我试试这个