创建类的多个实例会导致程序崩溃(C ++)

时间:2012-06-22 04:21:44

标签: c++ class object crash sfml

新手程序员在这里,我正在使用带有SFML库的C ++,Code :: Blocks和GNU GCC编译器。 Windows XP。

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

Enemy.h:

class Enemy
{
    ...
}

typedef Enemy* EnemyPointer;

Main.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);
    }
}

Cleanup.cpp:

void App::Cleanup()
{
    delete[] TheEnemies;
}

LevelData [] []是一个2D数组,包含从.txt文件中读取的信息。它包含敌人的数量,它们的坐标和类型。

我确定程序在Init()尝试使用构造函数中创建的敌人数组时崩溃了。我用评论标记了它。我查阅了有关如何创建对象数组的论坛帖子,大多数人都说这是如何做到的。我无法弄清楚它为什么会崩溃。如果有人知道如何解决这个问题,将不胜感激。感谢。

0 个答案:

没有答案