创建类的多个实例会导致程序崩溃(C+;+;) 新手程序员,我用C++与SFML库,代码::块,和GNU GCC编译器。WindowsXP
我正在制作一个简单的平台,作为将来更大游戏的练习。我决定将其设置为从文本文件中读取所有级别数据。我刚刚在程序中添加了敌人(虽然现在它只是在屏幕上打印一个精灵),第一次运行时效果很好,但之后在运行时崩溃。以下是相关的代码位: h:创建类的多个实例会导致程序崩溃(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
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;
}