Voici un code:C++ débordement de la pile
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(){};
J'ai posté chaque ligne de code qui exécute jusqu'à ce que le programme se bloque. Ce code s'est bien passé pendant longtemps, j'ai ajouté des choses qui ne s'exécutent même pas après le code que j'ai posté ici, et bam, un débordement de pile qui se produit à GameEngine::loadData()
ligne: CreatureStack p2Stacks[20];
ne va pas disparaître. Qu'est-ce que je fais mal ici? Est-ce tout ce que la pile peut gérer? J'ai augmenté la taille de la pile dans Visual Studio et j'ai obtenu l'erreur de partir, mais cela a considérablement ralenti les choses, alors comment puis-je trouver la source du problème et y remédier?
Quelle est la taille de ces objets que vous stockez sur la pile? (Comme CreatureStack, Battlefield, RuleSet, etc.) –
Etes-vous sûr de ne pas appeler 'loadData()' (ou 'playGame()') de manière récursive? – sth
Vous devez utiliser un débogueur et imprimer une trace de pile. Cela vous dira si le problème est une récurrence infinie (et quel est le cycle d'appel) ou si la profondeur des appels est petite et le problème est la quantité de données stockées dans la pile elle-même. –