运行此代码时出现此运行时错误:
void AlienShipManager::Update(float timeDelta,
BulletManager* bulletManager,
ParticleManager* particleManager,
GameStringSystem* stringBatch)
{
unsigned int i = 0;
while (i < m_alienShipList.size())
{
AlienResult result = m_alienShipList[i].Update(timeDelta, bulletManager);
switch (result)
{
case AlienResult::Dead:
break;
default:
break;
}
++i
}
}
排队
AlienResult result = m_alienShipList[i].Update(timeDelta, bulletManager);
我如何将 AlienShip 添加到矢量类:
m_alienShipList.push_back(AlienShip(position, speed, m_screeSize, m_alienShipTexture));
如果我有机会,也会出现错误:
AlienShip* newAlien = new AlienShip(position, speed, m_screeSize, m_alienShipTexture);
m_alienShipList.push_back(*newAlien);
delete newAlien;
但如果我将其更改为:
AlienShip* newAlien = new AlienShip(position, speed, m_screeSize, m_alienShipTexture);
m_alienShipList.push_back(*newAlien);
因此导致巨大的内存泄漏。
这是我的 AlienShip 类的外观:
#pragma once
#include "Body.h"
#include "BulletManager.h"
#include "ParticleManager.h"
enum AliensShipState
{
flying,
dying,
dead,
escaped
};
enum AlienResult
{
No,
Hit,
Dying,
Dead,
Escaped
};
class AlienShip : public Body
{
public:
AlienShip(void);
AlienShip(float2& position, float2& speed, float2* screenSize, ID3D11Texture2D* alienTexture);
~AlienShip(void);
AlienResult Update(float timeDelta, BulletManager* bulletManager);
void Draw(BasicSprites::SpriteBatch^ spriteBatch);
protected:
float m_baseY;
AliensShipState m_state;
float2* m_screenSize;
};
AlienShip 类继承自 Body 类,其中包含 Sprite 类,其中包含另一个向量。但是由于 Sprite 类在其他地方工作得很好,我不认为它是错误的来源。
我想知道为什么会发生这种情况,因为我找不到删除临时对象和损坏向量迭代器之间的关系,如果它完全损坏的话。
程序也可以在 Release 中编译和运行,但有一些数据损坏。
我正在使用适用于 Windows 8 的 Visual Studio 2012 Beta。
如果您需要更多源代码,请写。不幸的是,很难发布所有代码,因为这是一个复杂的程序。