Я пытаюсь создать массив объектов с нулевым символом в конце, как этот
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;
Цикл доступа должен быть:
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();
}
Ваш creature
это указатель на Creature
, Если вы увеличиваете этот указатель, вы будете указывать на следующий Creature
за указанным в данный момент, а не за следующим указателем в вашей таблице.
Использование:
for (int i=0; creatures[i]!=nullptr; i++) {
creatures[i]->travel();
}