以下是一些代码:
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(){};
我已发布执行的每一行代码,直到程序崩溃。这段代码运行了很长时间,我添加了一些甚至在我发布的代码之后都没有执行的东西,而bam,GameEngine::loadData()
行发生的堆栈溢出:CreatureStack p2Stacks[20];
将不要走开我在这做错了什么?所有堆栈都可以处理吗?我在Visual Studio中增加了堆栈大小并且错误消失了,但这大大减慢了速度,所以我如何找到问题的根源并修复它?
答案 0 :(得分:4)
显然,CreatureStack是一个大型对象。 您正在堆栈中分配其中的20个 。结果:堆栈溢出。
相反,为您的CreatureStack数组更改为new
或malloc
,将它们移动到堆内存而不是堆栈中。
完成后不要忘记释放它们。