Dưới đây là một số mã:C++ stack overflow
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(){};
Tôi đã đăng tải tất cả các dòng mã thực thi cho đến khi chương trình bị treo. Mã này chạy tốt trong một thời gian dài, tôi đã thêm một số nội dung thậm chí không thực thi cho đến khi mã tôi đã đăng ở đây và bam, tràn ngăn xếp xảy ra tại GameEngine::loadData()
dòng: CreatureStack p2Stacks[20];
sẽ không biến mất. Tôi làm gì sai ở đây? Là tất cả các ngăn xếp có thể xử lý? Tôi tăng kích thước ngăn xếp trong Visual Studio và có lỗi để biến mất, nhưng điều đó làm chậm đáng kể, vì vậy làm thế nào để tôi có được nguồn gốc của vấn đề và khắc phục điều đó?
Các đối tượng này bạn đang lưu trữ trên ngăn xếp bao nhiêu? (Giống như CreatureStack, Battlefield, RuleSet, vv) –
Bạn có chắc chắn rằng bạn không bằng cách nào đó gọi 'loadData()' (hoặc 'playGame()') đệ quy? – sth
Bạn nên sử dụng trình gỡ rối và in dấu vết ngăn xếp. Điều đó sẽ cho bạn biết nếu vấn đề là đệ quy vô hạn (và những gì chu kỳ cuộc gọi là) hoặc nếu độ sâu của các cuộc gọi là nhỏ và vấn đề là số lượng dữ liệu được lưu trữ trong ngăn xếp chính nó. –