こんにちは、コンテスト用のゲームを開発して数週間が経ちました。(私はコーディングに少し慣れていますが、それほど多くはありません)。
私はビジュアルC ++でゲームを書いています。Visual C++ でリリース モードで実行すると正常に実行されますが、.exe から実行しようとすると、ウィンドウがポップアップし、" * *.exe が動作を停止しました" と表示されます。エラーの原因はわかっていますが、修正方法がわかりません。多くのベクトルがあるため、エラーがポップアップ表示されます。ゲームを実行するプログラムからサイズ変更するベクトルを削除すると、壁、ボックス ベクトルなど、何でもかまいません。しかし、タスク マネージャーを調べると、ゲームが 20,000K のメモリしか占有しないため、非常に奇妙に感じます。
結論として、ゲームからいくつかのベクトルを削除すると、ゲームの exe が実行されます。そうでない場合は、ビジュアル C++ でのみ実行されます。私は何をすべきか?私は本当に迷っています。
/////////////////////////////////////////////// ///////////////////////////////
ベクトル リストを 4 つだけサイズ変更すると、.exe は実行されますが、4 つ以上のサイズを変更すると、exe でエラーが発生しますが、ビジュアル C++ インスタンスは引き続き実行されます。
class Level
{
public:
int LevelWidth;
MapElements::Background Background;
//OBJETS SUR MAP
Array<MapElements::Ground> Grounds;
Array<MapElements::Wall> Walls;
Array<MapElements::Platform> Platforms;
Array<MapElements::Box> Boxs;
//ENNEMIS et JOUEUR
Array<Gameplay::Droite> Droites;
Array<Gameplay::Cercle> Cercles;
Gameplay::Player Player;
};
これは機能します:
void Level::InitializeMap(int MaxGround, int MaxWall, int MaxPlatforms, int MaxBox)
{
Grounds.Element.resize(MaxGround);
Walls.Element.resize(MaxWall);
Platforms.Element.resize(MaxPlatforms);
Boxs.Element.resize(MaxBox);
}
これはしません:
void Level::InitializeMap(int MaxGround, int MaxWall, int MaxPlatforms, int MaxBox, int MaxCercles)
{
Grounds.Element.resize(MaxGround);
Walls.Element.resize(MaxWall);
Platforms.Element.resize(MaxPlatforms);
Boxs.Element.resize(MaxBox);
Cercles.Element.resize(MaxCercles);
}
配列クラス:
template <typename T> class Array
{
public:
std::vector<T> Element;
Array();
};
template <typename T> Array<T>::Array()
{
}
サイズ変更は、vector.resize() が 4 つしかない場合に機能し、変数 (壁、ボックスなど) のいずれかである可能性があります。エラーの原因は何ですか?