私は、数千行にまたがるif文をコーディングしました。私はそれをたくさんコメントアウトしないと、スタックオーバーフローエラーが発生します。私はそれがサイズに起因することを知っている。私はこの特定のif文が6つの異なるブロックのコードしか扱えないことが分かったからである[if(mainmenu1.equipment1A)] [if(mainmenu1.player1equipment:& (Player1.job == 1))|| ...ブロック]そして、もし7があっても、どのブロックがコメントアウトされているのかは関係ありません。このコードは、私が取り組んでいるゲームのコードの一部であり、コードはswitch文のまったく異なるgamestateのケースにあり、起動時にこのコードを読み込むべきではありません。コードがコメントアウトされていますが、起動時にはこのエラーが発生しますが、代わりにランタイムエラーにはなりませんか?その場合、プログラムがコードを読み取るまでエラーは発生しません。コード、それはすべて約70,000行ですが、それは繰り返しですので、想像thi SF20.exeの0x103B38B7(ig7icd32.dll)でのファーストチャンス例外:0xC00000FD:スタックオーバーフロー(パラメータ:0x00000000、0x01072000)。 SFML.exeの0x103B38B7(ig7icd32.dll)で処理されない例外:0xC00000FD:スタックオーバーフロー(パラメータ:0x00000000、0x01072000)。なぜ非常に大きなIf文でスタックオーバーフローが発生する
SFML.exeの0x101AC0BE(ig7icd32.dll)での最初の例外:0xC0000005:0x0107091Cのアクセス違反を書き込むアクセス違反。 SFML.exeの0x101AC0BE(ig7icd32.dll)で未処理例外が発生しました。0xC0000005: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");
"私は数千行にわたるif文をコーディングしています" – RyanP
しかし、発見されるのを待っているコーナーの周りに潜んでいるすべてのリファクタリング/デザインパターンを見てください! – stijn
ランソン文とランオンコード。 –