Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;游戏exe停止工作,很多类。使用visualc++;_C++_Structure_Exe_Sfml_Code Cleanup - Fatal编程技术网

C++ c++;游戏exe停止工作,很多类。使用visualc++;

C++ c++;游戏exe停止工作,很多类。使用visualc++;,c++,structure,exe,sfml,code-cleanup,C++,Structure,Exe,Sfml,Code Cleanup,嗨,已经好几个星期了,我正在为比赛开发一款游戏。(我对编码有点熟悉,但不太熟悉) 我用Visual C++编写游戏。当我在VisualC++中以发布模式运行它时,它运行正常,但是当我从.exe尝试时,窗口弹出并说“**exe已经停止工作”。我知道是什么导致了错误,但我不知道如何修复它。这个错误会弹出,因为有很多向量,如果我从游戏运行的程序中删除一些调整大小的向量,它可以是任何东西,一堵墙,一个盒子向量,没关系。但我发现这真的很奇怪,因为当我在任务管理器中查找时,游戏只占用20000K的内存 因此

嗨,已经好几个星期了,我正在为比赛开发一款游戏。(我对编码有点熟悉,但不太熟悉)

我用Visual C++编写游戏。当我在VisualC++中以发布模式运行它时,它运行正常,但是当我从.exe尝试时,窗口弹出并说“**exe已经停止工作”。我知道是什么导致了错误,但我不知道如何修复它。这个错误会弹出,因为有很多向量,如果我从游戏运行的程序中删除一些调整大小的向量,它可以是任何东西,一堵墙,一个盒子向量,没关系。但我发现这真的很奇怪,因为当我在任务管理器中查找时,游戏只占用20000K的内存

因此,如果删除游戏中的一些向量,游戏exe就会运行,如果不是,它只运行在Visual C++中。我该怎么办?我真的迷路了

//////////////////////////////////////////////////////////////////////////////////

<> >如果我只调整四个向量列表,.exe将运行,但是如果我调整大小超过4,exe会出错,但是VisualC++实例仍然运行。
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, 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()
{
}
模板类数组
{
公众:
std::向量元素;
数组();
};
模板数组::数组()
{
}

如果我只有4个vector.resize(),并且它可以是任何变量(墙、框等),那么调整大小是有效的。错误的来源是什么?

当你在vc中运行游戏时,如果你没有更改,工作目录默认为项目目录

从.exe运行时,工作目录就是.exe所在的目录


因此,您可以检查您的游戏是否依赖于某些在直接运行时无法正确定位的内容。

您对导致该错误的原因的看法是错误的。在windows上,
*.exe已停止工作
。通常意味着您的应用程序已完成


这可能是由内存边界的任何读取或写入造成的,这通常意味着您在某个地方遇到了
空闲()
/
删除
malloc()
/
新建
,或
,但代码较多,或没有进一步解释,我无法进一步诊断。

您基本上是错误地使用了Vector。您可以立即将它们调整到最大可能大小,而不是让它们相应地调整大小。您可能正在耗尽所有可用内存

这样做可能更好:

class Level
{

public:

    int LevelWidth;
    MapElements::Background Background;

    //OBJETS SUR MAP
    MapElements::Ground Grounds[MAXGROUNDS];
    MapElements::Wall Walls[MAXWALLS];
    MapElements::Platform Platforms[MAXPLATFORMS];
    MapElements::Box Boxs[MAXBOXES];

    //ENNEMIS et JOUEUR
    Array<Gameplay::Droite> Droites;
    Array<Gameplay::Cercle> Cercles;
    Gameplay::Player Player;
};
类级别
{
公众:
内部水平宽度;
mapements::背景;
//OBJETS SUR地图
MapElements::地面地面[最大地面];
MapElements::墙[MAXWALLS];
MapElements::平台平台平台[MaxPlatform];
MapElements::Box-Boxs[MaxBox];
//恩内米斯酒店
排屑岩;
阵列粒子;
游戏性:玩家;
};
并依靠级别的分配来初始化级别的内存

现在。我不知道MaxCercles是什么。但您需要确保没有占用太多内存(也就是说,如果它们都是maxint,那么根据每个类的大小,您会遇到一点麻烦)


如果要使用向量,只需将它们设置为默认的中间地面大小(如100或其他),并让它们根据您添加的内容自行调整大小

你是如何编译exe的?16位模式?除非您以某种有限的方式构建,否则类的数量是不受限制的。我猜在运行时需要一个文件,当从visual studio中运行时,该文件在运行时可用,但当您运行exe时则不可用。游戏所需的所有资源都和可执行文件在同一个目录下吗?哇,为什么不投票?不,没有任何缺少的文件,我知道类有限制,但我会看看编译。如果有人可以投票支持,这是一个严肃的问题!:/谢谢我没有使用这些,所以我把很多事情搞砸了。。。我找到了一篇关于如何使用它们的文章,所以我将尝试一下。但是它是正常的吗?它在VisualC++中运行正常,而不是在EXE中运行?它仍然是同一个程序,对吗?它们之间的区别是什么?我很确定所有的DLL和图形都在那里。我的问题与此有关吗@user1236892,您的程序是否可能过度使用堆栈并导致堆栈溢出?默认堆栈大小应该是1MB,当程序在ide中运行时,保留的堆栈大小可能更大?
class Level
{

public:

    int LevelWidth;
    MapElements::Background Background;

    //OBJETS SUR MAP
    MapElements::Ground Grounds[MAXGROUNDS];
    MapElements::Wall Walls[MAXWALLS];
    MapElements::Platform Platforms[MAXPLATFORMS];
    MapElements::Box Boxs[MAXBOXES];

    //ENNEMIS et JOUEUR
    Array<Gameplay::Droite> Droites;
    Array<Gameplay::Cercle> Cercles;
    Gameplay::Player Player;
};