С ++ завершенный массив объектов с нулевым символом

Я пытаюсь создать массив объектов с нулевым символом в конце, как этот

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

Решение

Цикл доступа должен быть:

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

Другие решения

Ваш creature это указатель на Creature, Если вы увеличиваете этот указатель, вы будете указывать на следующий Creature за указанным в данный момент, а не за следующим указателем в вашей таблице.

Использование:

for (int i=0; creatures[i]!=nullptr; i++) {
creatures[i]->travel();
}
2

По вопросам рекламы [email protected]