İçerideki ifadeler varsa iç içe geçmiş birkaç satır içeren bir if ifadesi kodluyorum. Çok fazla yorumlamadığımda yığın taşması hatası alıyorum. Boyutu nedeniyle biliyorum çünkü bu özel if ifadesinin yalnızca 6 farklı kod bloğunu işleyebileceğini buldum [blok (eğer mainmenu1.equipment1A] yazıyorsa) [bunlardan 10 tane tane varsa] ((mainmenu1.player1equipment & &) (Player1.job == 1)) || ... block] ve 7 tane olursa olsun hangi blokların yorumlanmamış olduğu önemli değil. Bu kod, üzerinde çalıştığım bir oyundaki kodun bir parçasıdır ve kod, bir anahtar deyiminde tamamen farklı bir gametate durumundadır ve başlangıçta bu kod okunmamalıdır. Hiçbiri ile birlikte oluşturma sırasında bir derleme hatası almıyorum kod, ancak başlangıçta bu hatayı aldım.Ama bunun yerine bir çalışma zamanı hatası değil mi? Ama bu durumda, program kodu okur kadar hata almam gerekir.O bir örnek içerecektir kod, bu yaklaşık 70.000 satırdır ama tekrarlayan bir şeydir. Aşağıdaki kod zamanları 70.Neden çok büyük If ifadeleri bir yığın taşmasına neden oluyorsa
SFML.exe dosyasında 0x103B38B7 (ig7icd32.dll) de ilk şans istisnası: 0xC00000FD: Yığın taşması (parameters: 0x00000000, 0x01072000). SFML.exe içinde 0x103B38B7 (ig7icd32.dll) işlenmeyen özel durum: 0xC00000FD: Yığın taşması (parametreler: 0x00000000, 0x01072000).
SFML.exe içinde 0x101AC0BE (ig7icd32.dll) de ilk şans istisnası: 0xC0000005: Erişim ihlali yazma konumu 0x0107091C. SFML.exe içinde 0x101AC0BE (ig7icd32.dll) işlenmeyen özel durum: 0xC0000005: Erişim ihlali yazma konumu 0x0107091C.
//equipment text
if (mainmenu1.equipmentmenu2)
{
if (executeequipmenttextonce)
{
executeequipmenttextonce = false;
if (mainmenu1.rightselected)
{
if ((mainmenu1.player1equipment && (Player1.job == 1)) || (mainmenu1.player2equipment && (Player2.job == 1)) || (mainmenu1.player3equipment && (Player3.job == 1)))
{
if (mainmenu1.equipment1A)
{
if (!mainmenu1.knightweapon1displayed && mainmenu1.knightweapon1)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon1displayed = true;
textDisplay16.text.setString("Broadsword");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw1));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon2displayed && mainmenu1.knightweapon2)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon2displayed = true;
textDisplay16.text.setString("Ea");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw2));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon3displayed && mainmenu1.knightweapon3)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon3displayed = true;
textDisplay16.text.setString("Zangetsu");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw3));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon4displayed && mainmenu1.knightweapon4)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon4displayed = true;
textDisplay16.text.setString("Silver Fleurette");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw4));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon5displayed && mainmenu1.knightweapon5)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon5displayed = true;
textDisplay16.text.setString("Lawliet");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw5));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon6displayed && mainmenu1.knightweapon6)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon6displayed = true;
textDisplay16.text.setString("Luminous Edge");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw6));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon7displayed && mainmenu1.knightweapon7)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon7displayed = true;
textDisplay16.text.setString("Heaven's Saber");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw7));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon8displayed && mainmenu1.knightweapon8)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon8displayed = true;
textDisplay16.text.setString("Crystal Edge");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw8));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon9displayed && mainmenu1.knightweapon9)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon9displayed = true;
textDisplay16.text.setString("Triple Zoro");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw9));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon10displayed && mainmenu1.knightweapon10)
{
mainmenu1.equipment1A = false;
mainmenu1.knightweapon10displayed = true;
textDisplay16.text.setString("Elsword");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw10));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY1);
textDisplayArray16.push_back(textDisplay16);
}
}
else if (mainmenu1.equipment2A)
{
if (!mainmenu1.knightweapon1displayed && mainmenu1.knightweapon1)
{
mainmenu1.equipment2A = false;
mainmenu1.knightweapon1displayed = true;
textDisplay16.text.setString("Broadsword");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY2);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw1));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY2);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon2displayed && mainmenu1.knightweapon2)
{
mainmenu1.equipment2A = false;
mainmenu1.knightweapon2displayed = true;
textDisplay16.text.setString("Ea");
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY2);
textDisplayArray16.push_back(textDisplay16);
textDisplay16.text.setString(to_string(mainmenu1.knightw2));
textDisplay16.text.setPosition(view1.getCenter().x - window.getSize().x/2 + equipmentPositionX1 + equipmentstockpositionx, view1.getCenter().y - window.getSize().y/2 + equipmentPositionY2);
textDisplayArray16.push_back(textDisplay16);
}
else if (!mainmenu1.knightweapon3displayed && mainmenu1.knightweapon3)
{
mainmenu1.equipment2A = false;
mainmenu1.knightweapon3displayed = true;
textDisplay16.text.setString("Zangetsu");
"Birkaç bin satırlık bir if deyimi kodladım" – RyanP
.. ama köşede gizlenen tüm bu refactorings/tasarım desenlerine bakın, keşfedilmeyi bekliyor! – stijn
Runon cümleleri ve runon kodu. –