簡體   English   中英

C ++ null終止的對象數組

[英]c++ null terminated array of objects

我試圖創建這樣的對象的空終止數組

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;

你的creature是一個指向一個Creature 如果增加該指針,則將指向當前指向的指針之后的下一個Creature ,而不是指向表中的下一個指針。

采用:

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

訪問循環應為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM