現在STLのlistを用いてシューティングゲームを作っているのですが、オブジェクトのdeleteがうまくいかず困っています。
開発環境はVC2013で、
ソースコードは以下の通りです。
/*ソースコード*/
class Bullet_Object{
/*省略*/
};
/*メインループ外での宣言*/
list<Bullet_Object> BulletList; //Bullet_Object用リスト作成
/*メインループ内での処理*/
list<Bullet_Object> BulletCopy;
list<Bullet_Object>::iterator It_Bullet;
/* 弾処理 */
for (It_Bullet = BulletList.begin(); It_Bullet != BulletList.end();){
It_Bullet->Calc();
if (It_Bullet->bullet_kind != 100 && It_Bullet->CheckHit(Player)){ //プレイヤーの弾のあたり判定
Player.hp -= 1;
}
for (It_Enemy = EnemyList.begin(); It_Enemy != EnemyList.end(); It_Enemy++){
if (It_Bullet->bullet_kind == 100 && It_Bullet->CheckHit(*It_Enemy)){ //敵の弾のあたり判定
It_Enemy->hp -= 100;
}
}
if (It_Bullet->state == ALIVE){
BulletCopy.push_front(*It_Bullet);
It_Bullet++;
}
else{
//弾のdelete処理を書く。
Bullet_Object *tmp = &(*It_Bullet);
It_Bullet = BulletList.erase(It_Bullet);
delete tmp;
}
}
BulletList.clear();
BulletList = BulletCopy;
端的に言えば、listに入っているオブジェクトの計算をした後に、STATE が DEADになったオブジェクトを消去するようにしているのですが…
今のプログラムだとdelete tmpの箇所で実行時にエラーがでてしまいました。
どうやら存在しないオブジェクトを削除しようとしているようです。
お詳しい方のお知恵を借りられたらと思います。