Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++与SFML库,代码::块,和GNU GCC编译器。WindowsXP_C++_Class_Object_Crash_Sfml - Fatal编程技术网

创建类的多个实例会导致程序崩溃(C+;+;) 新手程序员,我用C++与SFML库,代码::块,和GNU GCC编译器。WindowsXP

创建类的多个实例会导致程序崩溃(C+;+;) 新手程序员,我用C++与SFML库,代码::块,和GNU GCC编译器。WindowsXP,c++,class,object,crash,sfml,C++,Class,Object,Crash,Sfml,我正在制作一个简单的平台,作为将来更大游戏的练习。我决定将其设置为从文本文件中读取所有级别数据。我刚刚在程序中添加了敌人(虽然现在它只是在屏幕上打印一个精灵),第一次运行时效果很好,但之后在运行时崩溃。以下是相关的代码位: h: class Enemy { ... } typedef Enemy* EnemyPointer; 主要条款h: class App { private: sf::Image EnemyImage; EnemyPoin

我正在制作一个简单的平台,作为将来更大游戏的练习。我决定将其设置为从文本文件中读取所有级别数据。我刚刚在程序中添加了敌人(虽然现在它只是在屏幕上打印一个精灵),第一次运行时效果很好,但之后在运行时崩溃。以下是相关的代码位:

h:

class Enemy
{
    ...
}

typedef Enemy* EnemyPointer;
主要条款h:

class App
{
    private:
        sf::Image EnemyImage;

        EnemyPointer TheEnemies;

        int LevelData[256][4];

    public:
        App();

        int Execute();

        bool Init();

        void Cleanup();
}
Main.cpp:

App::App()
{
    TheEnemies = new Enemy[16]
}

int main()
{
    App TheApp;
    return TheApp.Execute();
}

int App::Execute()
{
    if(!Init()) return -1;

    LoadLevel();

    while(Running)
    {
        OnEvent(TheEvent);

        Loop();

        Render();

        Frame++;
    }

    Cleanup();

    return 0;
}
Init.cpp:

bool App::Init()
{
    if(!EnemyImage.LoadFromFile("Enemy.bmp"))
    {
        std::cout<<"Failed to load \"Enemy.bmp\"";
        return false;
    }

    //Program crashes in this for loop.

    for(int c=0;c<=LevelData[0][1];c++)
    {
        TheEnemies[c].SetX(LevelData[LevelData[0][0]+1+c][0]);
        TheEnemies[c].SetY(LevelData[LevelData[0][0]+1+c][1]);
        TheEnemies[c].SetType(LevelData[LevelData[0][0]+1+c][2]);

        TheEnemies[c].Sprite.SetImage(EnemyImage);
    }
}
LevelData[][]是一个二维数组,包含从.txt文件读取的信息。它包含敌人的数量、坐标和类型


我已经确定,当程序试图使用构造函数中创建的敌人数组时,它在Init()期间崩溃。我在上面写了一条评论。我查阅了论坛上关于如何创建对象数组的帖子,大多数帖子都说这就是如何做到的。我不明白它为什么会崩溃。如果有人知道如何解决这个问题,我们将不胜感激。谢谢。

你到底为什么不使用析构函数呢?这正是它的目的!还有,你得跟着我。我没想到这一点,说不出话来。。。抱歉,这几乎是我第一次在实际项目中使用类,所以我不习惯它们。我从来没有使用过析构函数。好吧,我移动了删除[]敌人;但我还是遇到了同样的问题。(我在读关于三法则的书,我从来没有听说过)好吧,你在这里只使用了一个实例,但是当你的类拥有一个资源的所有权时,遵循它总是一个好主意。所以这与崩溃问题无关?
void App::Cleanup()
{
    delete[] TheEnemies;
}