c ++ null终止对象数组

时间:2014-11-15 00:29:20

标签: c++ arrays null-terminated

我正在尝试创建一个空终止的对象数组,如

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;

2 个答案:

答案 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();
}