ヒープ破壊、とのエラーが出ます

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
axis
記事: 10
登録日時: 9年前
住所: 山梨
連絡を取る:

ヒープ破壊、とのエラーが出ます

#1

投稿記事 by axis » 9年前

度々失礼します
もしかしたら自分の基本的な知識が足りないのかもしれませんが
Effectというクラスのデストラクタで
「HEAP CORRUPTION DETECTED」
とのエラー画面が出て止まってしまいます
でるタイミングはデストラクタが終わった時です
また、リリースでビルドすると、ログで出してみても場所不定で応答なしになります
Unionはグローバルなクラスなどを管理するクラス
Logはテキストファイルにログを書き入れるクラスです

https://www.dropbox.com/s/7hmvo0bbj9g5a ... 6.bmp?dl=0
エラー画面のスクリーンショットは、画像アップローダーが扱えなかったので、
ファイルでドロップボックスにあげましたorz

Effect.h

コード:

class Effect
{
private:
	friend Union;
	Effect(void);
	virtual ~Effect(void);

	void Update();
	void Draw();

	list<aEffect>mE;
	list<aEffect>::iterator ite;
	sEffect* mEffect[EFFECT_MAX];

	int EmptySearch(eEffect);
	void EffectDeleteCalc();
	void EffectDelete(int);

	//エフェクト種類別
	void (Effect::*aEffCalc[EFFECT_KIND_MAX])(aEffect*);
	void (Effect::*sEffCalc[EFFECT_KIND_MAX])(sEffect*);

	//敵消滅
	int hImg_Effect_del[5];
	void aEffCalc0(aEffect*);
	void sEffCalc0(sEffect*);

	//爆発(中)
	int hImg_Effect_Baku[5];
	void aEffCalc_Baku(aEffect*);
	void sEffCalc_Baku(sEffect*);

	//ボム
	int hImg_Bomb[5];
	void aEffCalc_Bomb(aEffect*);
	void sEffCalc_Bomb(sEffect*);

	//ワープ
	int hImg_Warp1[4];
	void aEffCalc_Warp1(aEffect*);
	void sEffCalc_Warp1(sEffect*);

	//暗転
	int hImg_Black;
	void aEffCalc_Black(aEffect*);
	void sEffCalc_Black(sEffect*);

public:
	void EnterEffect(eEffect cKind);
	void EnterEffect(eEffect cKind,double cX,double cY);
	void EnterEffect(eEffect cKind, double cX, double cY,int cTill,int brt);
};
Effect.cpp

コード:

Effect::Effect(void)
{
	for(int i=0;i<EFFECT_MAX;i++){
		mEffect[i]=nullptr;
	}

	//敵消滅
	LoadDivGraph("rc/effect/death/hit_effect.png",5,5,1,140,140,hImg_Effect_del);
	sEffCalc[eEff_Del]=&Effect::sEffCalc0;
	aEffCalc[eEff_Del] = &Effect::aEffCalc0;

	//ボム
	hImg_Bomb[0] = LoadGraph("rc/effect/PlyBomb/PlyBombW.png");
	hImg_Bomb[1] = LoadGraph("rc/effect/PlyBomb/PlyBombH.png");
	hImg_Bomb[2] = LoadGraph("rc/effect/PlyBomb/bom0.png");
	hImg_Bomb[3] = LoadGraph("rc/effect/PlyBomb/bom1.png");
	hImg_Bomb[4] = LoadGraph("rc/img/player/tati_bom.png");
	sEffCalc[eEff_Bomb]=&Effect::sEffCalc_Bomb;
	aEffCalc[eEff_Bomb] = &Effect::aEffCalc_Bomb;

	//爆発中
	LoadDivGraph("rc/effect/bomb/ice.png",8,8,1,120,120,hImg_Effect_Baku);
	sEffCalc[eEff_Baku]=&Effect::sEffCalc_Baku;
	aEffCalc[eEff_Baku] = &Effect::aEffCalc_Baku;

	
	LoadDivGraph("rc/effect/normal/warp1_320.png", 6, 1, 6, 320, 240,hImg_Warp1);
	aEffCalc[eEff_Warp1] = &Effect::aEffCalc_Warp1;
	sEffCalc[eEff_Warp1] = &Effect::sEffCalc_Warp1;
	
	//暗転用の黒
	hImg_Black = LoadGraph("rc/effect/Black.png");
	sEffCalc[eEff_Black] = &Effect::sEffCalc_Black;
	aEffCalc[eEff_Black] = &Effect::aEffCalc_Black;
}

Effect::~Effect(void)
{	
	Union* gUnion = Union::GetInstance();
	GlobalLog* gLog = gUnion->GetLog();


	gLog->PutBad("Effectデストラクタ開始");

	mE.clear();

	for(int i=0;i<EFFECT_MAX;i++){
		if (mEffect[i] != nullptr){
			delete mEffect[i];
			mEffect[i] = nullptr;
		}
	}

	gLog->PutBad("Effectデストラクタ完了");
	
}//ここ
エラーのでるタイミングは、ログに「Effectデストラクタ完了」が出力されたあと
//ここ のところです。
なにか足りない点がありましたら答えます。
本当にわかりづらくてすみませんが、ご教授くださいm(_ _)m
ビギナーです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: ヒープ破壊、とのエラーが出ます

#2

投稿記事 by h2so5 » 9年前

LoadDivGraphにわたす配列のサイズが足りないように見えますが。

アバター
axis
記事: 10
登録日時: 9年前
住所: 山梨
連絡を取る:

Re: ヒープ破壊、とのエラーが出ます

#3

投稿記事 by axis » 9年前

本当でした・・・すいません
回答有難うございました。
これでも2時間は迷っていたんですorz
このコードで動いてしまうとは恐ろしい
ビギナーです。

閉鎖

“C言語何でも質問掲示板” へ戻る