Переполнение стека C++

Вот некоторый код:

void main()
{
    GameEngine ge("phil", "anotherguy");
    string response;
    do {
        ge.playGame();
        cout << endl << "Do you want to (r)eplay the same battle, (s)tart a new battle, or (q)uit? ";
        cin >> response;
    } while(response == "r" || response == "R" || response == "s" || response == "S" );
}

GameEngine::GameEngine(string name1, string name2)
{
    p1Name = name1;
    p2Name = name2;
}

void GameEngine::playGame()
{
    cout << "PLAY GAME" << endl;
    Army p1, p2;
    Battlefield testField;
    RuleSet rs;

    int xSize = 13; // Number of rows
    int ySize = 13; // Number of columns

    loadData(p1, p2, testField, rs, xSize, ySize);

    ...
}

void GameEngine::loadData(Army& p1, Army& p2, Battlefield& testField, RuleSet& rs, int& xSize, int& ySize)
{
    string terrain = BattlefieldUtils::pickTerrain();
    string armySplit[14];//id index 1
    string ruleSplit[19];//in index 7
    string armyP1, armyP2, ruleSet;
    Skill p1Skills[8];
    Skill p2Skills[8];
    CreatureStack p1Stacks[20];
    CreatureStack p2Stacks[20];

    ...
}

CreatureStack(){quantity = 0; isLive = false; id = -1;};

Army(){};

Battlefield(){};

RuleSet(){};

Я отправил каждую строку кода, которая выполняется до катастрофических отказов программы. Этот код хорошо работал в течение долгого времени, я добавил некоторый материал, который даже не выполняется до пути после кода, который я отправил здесь, и обман, переполнение стека, которое происходит в GameEngine::loadData() строка: CreatureStack p2Stacks[20]; не уйдет. Что я делаю неправильно здесь? Тот весь стек, может обработать? Я увеличил размер стека в Visual Studio и получил ошибку уйти, но это значительно замедлило вещи, поэтому как я добираюсь до источника проблемы и фиксирую это?

5
задан Peter Mortensen 12 February 2011 в 11:28
поделиться

1 ответ

Очевидно, CreatureStack - большой объект. Вы размещаете 20 из них в стеке . Результат: переполнение стека.

Вместо этого измените на new или malloc для вашего массива CreatureStack, переместив их в память кучи вместо стека.

Не забудьте освободить их, когда закончите.

4
ответ дан 15 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: