我正在使用一个全局数组(我知道它们是邪恶的)。这不是什么大问题,但我不知道为什么它以一种方式而不是另一种方式工作,因为它们应该是相同的。(否则我需要以当前工作方式释放内存)。
无论如何,我有这个 Snake 课程。我想做,这是全局数组:
Snake snakes[8];
我有几个(或无论如何都会)几个与之交互的类和函数。有问题的问题发生在 Snake 类中的 setter 函数上。它编译得很好,但是有段错误。原来,这是一个空指针(0x0)。不知道为什么。在这种情况下,堆栈跟踪来自另一个文件的函数调用,该文件包括蛇头文件并具有以下内容:
extern Snake * snakes;
数组的名称是一个指针,所以我认为这应该可行。奇怪的是,它没有。我不知道为什么。
但是,当我将声明从原来的内容更改为:
Snake * snakes;
然后像这样分配它:
snakes = new Snake [8];
有用!但是,当蛇的数量不变时,我需要释放一些我不想这样做的东西。(8)。
此外,有问题的函数调用访问第 0 个元素,每次有 8 个元素。
知道是什么原因造成的吗?
在旁注中,全局变量在命名空间中仍然是邪恶的吗?(不是匿名的)。我之所以这样问是因为我正在努力养成 OO 习惯并在逻辑上构建事物,与我最后的努力相比,我确信这会得到回报,封装、组织等都是有意义的。(也许几年后,编译时间)。尽管如此,必须在函数调用中包含一个作用域变量以进行设置似乎......很糟糕。这是正确的还是有更好的方法?(然后是全局、命名空间或其他)
编辑:错误是一个段错误,在成员函数的行。
蛇成员函数:
void setValue(Some value here...) {this-> value = input)
来自外部全局数组的文件的调用:
snakes[0].setValue(some value here...)