gpt4 book ai didi

C++ 堆栈溢出

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:03 27 4
gpt4 key购买 nike

这是一些代码:

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() 的堆栈溢出line: CreatureStack p2Stacks[20]; 不会消失。我在这里做错了什么?这是所有堆栈都可以处理的吗?我在 Visual Studio 中增加了堆栈大小并使错误消失,但这大大减慢了速度,那么我如何找到问题的根源并解决它?

最佳答案

显然,CreatureStack 是一个大对象。您正在分配其中的 20 个在堆栈上。结果:堆栈溢出。

相反,为您的 CreatureStack 数组更改为 newmalloc,将它们移动到堆内存而不是堆栈。

不要忘记在完成后释放它们。

关于C++ 堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3019982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com