我正在尝试创建一个空终止的对象数组,如
void Game::createCreatures(int numCreatures) {
creatures = new Creature *[numCreatures + 1];
for (int i = 0; i <= numCreatures; i++) {
if(i < numCreatures) {
creatures[i] = new Runner(maze);
} else creatures[i] = NULL;
}
}
然后像这样访问它们
for (Creature *creature = creatures[0]; creature != NULL; creature++) {
creature->travel();
}
我究竟做错了什么?当我试图“旅行”该生物时,我收到了一个EXC_BAD_ACCESS。我知道数组的创建有问题,因为如果我尝试使用我的访问循环打印所有生物的地址,它会永久打印。我知道我的指针逻辑有问题,帮忙吗?
生物宣言就是这个
Creature **creatures;
答案 0 :(得分:2)
您的creature
是指向Creature
的指针。如果递增此指针,您将指向当前指向的指针后面的下一个Creature
,而不指向表中的下一个指针。
使用:
for (int i=0; creatures[i]!=nullptr; i++) {
creatures[i]->travel();
}
答案 1 :(得分:1)
访问循环应该是:
for (int i = 0; creatures[i] != NULL; i++) {
Creature *creature = creatures[i];
creature->travel();
}
你的循环将creatures[0]
视为一系列生物,但它只是一个生物。
如果你想用指针算术做循环,它应该是:
for (Creature **creature = &creatures[0]; *c != NULL; c++) {
(*creature)->travel();
}