我试图创建这样的对象的空终止数组

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。我知道数组的创建有问题,因为如果我尝试使用我的for循环来打印所有生物的地址,它将永远打印。我知道我的指针逻辑有问题,对吗?

生物宣言是这个

Creature **creatures;

最佳答案

访问循环应为:

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

关于c++ - C++ null终止的对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26941085/

10-11 00:48