ページ 11

そこにあったはずのデータが壊れる

Posted: 2016年5月27日(金) 20:55
by 夢幻ノ月夜
shared_ptrを使ってstd::listでオブジェクトを管理しているのですが
敵を追加したら
「初期化に成功しているのに、更新関数→描画関数の間で全てのメンバ変数が不正な値になる」現象が発生してしまいました
更新関数の1行目にブレークポイントを設定して変数の中身を見たら、
想定した通りの値に初期化されていましたが、
描画関数の方で全ての値がわけのわからない数になっていました(e-25やら#DENやらよく分からないレベルの値)
なんで更新関数を通しただけなのに全ての変数が壊れてしまうのでしょうか?

何の役にも立たないかもしれませんがクラスの定義と更新関数と描画関数のコード貼っておきます

コード:

class Enemy_Ireel :public EnemyEx{
	float FirstPosX;
public:
	Enemy_Ireel(float x,float y):EnemyEx(x,y,0,5.0f,300,150){
		this->HitArea=20;
		this->FirstPosX=x;
	}
	~Enemy_Ireel(){
	}

	void Damage(int value);
	void Dead();

	void Move();
	void Draw();
};

void Enemy_Ireel::Move(){
	this->cnt++;
	this->y+=this->sp;
	this->x=this->FirstPosX+cos(PI2/120*this->cnt)*32;
	if(this->cnt % 60==0){
		Object_Manager::AddTask(new Bullet_Homing_manytimes(this->x,this->y,PI2/4,9,3,7,20,3,B_SMALL,CYAN,75));
	}
	if(x< 0-32 || x > 640+32 || y < 0-32 || y >480+32)this->used=false;
}

void Enemy_Ireel::Draw(){
	DrawRotaGraph(this->x,this->y,1,this->a,en_ireelG[(this->cnt/10)%2],TRUE);
}

Re: そこにあったはずのデータが壊れる

Posted: 2016年5月27日(金) 22:51
by 夢幻ノ月夜
夢幻ノ月夜 さんが書きました:shared_ptrを使ってstd::listでオブジェクトを管理しているのですが
敵を追加したら
「初期化に成功しているのに、更新関数→描画関数の間で全てのメンバ変数が不正な値になる」現象が発生してしまいました
更新関数の1行目にブレークポイントを設定して変数の中身を見たら、
想定した通りの値に初期化されていましたが、
描画関数の方で全ての値がわけのわからない数になっていました(e-25やら#DENやらよく分からないレベルの値)
なんで更新関数を通しただけなのに全ての変数が壊れてしまうのでしょうか?

何の役にも立たないかもしれませんがクラスの定義と更新関数と描画関数のコード貼っておきます

コード:

class Enemy_Ireel :public EnemyEx{
	float FirstPosX;
public:
	Enemy_Ireel(float x,float y):EnemyEx(x,y,0,5.0f,300,150){
		this->HitArea=20;
		this->FirstPosX=x;
	}
	~Enemy_Ireel(){
	}

	void Damage(int value);
	void Dead();

	void Move();
	void Draw();
};

void Enemy_Ireel::Move(){
	this->cnt++;
	this->y+=this->sp;
	this->x=this->FirstPosX+cos(PI2/120*this->cnt)*32;
	if(this->cnt % 60==0){
		Object_Manager::AddTask(new Bullet_Homing_manytimes(this->x,this->y,PI2/4,9,3,7,20,3,B_SMALL,CYAN,75));
	}
	if(x< 0-32 || x > 640+32 || y < 0-32 || y >480+32)this->used=false;
}

void Enemy_Ireel::Draw(){
	DrawRotaGraph(this->x,this->y,1,this->a,en_ireelG[(this->cnt/10)%2],TRUE);
}
どうやらDrawRoraGraph関数を通った直後にエラーが起きているようです
→もしかしたら更新関数には非はない?

Re: そこにあったはずのデータが壊れる

Posted: 2016年5月27日(金) 22:54
by 夢幻ノ月夜
夢幻ノ月夜 さんが書きました:
夢幻ノ月夜 さんが書きました:shared_ptrを使ってstd::listでオブジェクトを管理しているのですが
敵を追加したら
「初期化に成功しているのに、更新関数→描画関数の間で全てのメンバ変数が不正な値になる」現象が発生してしまいました
更新関数の1行目にブレークポイントを設定して変数の中身を見たら、
想定した通りの値に初期化されていましたが、
描画関数の方で全ての値がわけのわからない数になっていました(e-25やら#DENやらよく分からないレベルの値)
なんで更新関数を通しただけなのに全ての変数が壊れてしまうのでしょうか?

何の役にも立たないかもしれませんがクラスの定義と更新関数と描画関数のコード貼っておきます

コード:

class Enemy_Ireel :public EnemyEx{
	float FirstPosX;
public:
	Enemy_Ireel(float x,float y):EnemyEx(x,y,0,5.0f,300,150){
		this->HitArea=20;
		this->FirstPosX=x;
	}
	~Enemy_Ireel(){
	}

	void Damage(int value);
	void Dead();

	void Move();
	void Draw();
};

void Enemy_Ireel::Move(){
	this->cnt++;
	this->y+=this->sp;
	this->x=this->FirstPosX+cos(PI2/120*this->cnt)*32;
	if(this->cnt % 60==0){
		Object_Manager::AddTask(new Bullet_Homing_manytimes(this->x,this->y,PI2/4,9,3,7,20,3,B_SMALL,CYAN,75));
	}
	if(x< 0-32 || x > 640+32 || y < 0-32 || y >480+32)this->used=false;
}

void Enemy_Ireel::Draw(){
	DrawRotaGraph(this->x,this->y,1,this->a,en_ireelG[(this->cnt/10)%2],TRUE);
}
どうやらDrawRoraGraph関数を通った直後にエラーが起きているようです
→もしかしたら更新関数には非はない?

コード:

if(x< 0-32 || x > 640+32 || y < 0-32 || y >480+32)this->used=false;
この時点で壊れていました(´・ω・`)

Re: そこにあったはずのデータが壊れる

Posted: 2016年5月28日(土) 16:12
by hide
プロジェクト中の他のコードが一切動作しない状態にしたうえで、このコードだけを動かしても同様ですか?

Re: そこにあったはずのデータが壊れる

Posted: 2016年5月28日(土) 22:33
by 夢幻ノ月夜
hide さんが書きました:プロジェクト中の他のコードが一切動作しない状態にしたうえで、このコードだけを動かしても同様ですか?
VC++に怒られてしまう箇所がDrawRotaGraphの呼び出しのタイミングになってるんですが
これ関係あるんですかね?(引数は不正な値ではないっぽい)
毎回なんかしらの場所のDrawRotaGraphで止められてしまいます