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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
夢幻ノ月夜
記事: 133
登録日時: 4年前
住所: Stens;Gate世界線

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

#1

投稿記事 by 夢幻ノ月夜 » 3年前

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);
}
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
夢幻ノ月夜
記事: 133
登録日時: 4年前
住所: Stens;Gate世界線

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

#2

投稿記事 by 夢幻ノ月夜 » 3年前

夢幻ノ月夜 さんが書きました: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関数を通った直後にエラーが起きているようです
→もしかしたら更新関数には非はない?
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
夢幻ノ月夜
記事: 133
登録日時: 4年前
住所: Stens;Gate世界線

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

#3

投稿記事 by 夢幻ノ月夜 » 3年前

夢幻ノ月夜 さんが書きました:
夢幻ノ月夜 さんが書きました: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;
この時点で壊れていました(´・ω・`)
毎回ゲーム作ろうとするたびに壁にぶち当たる

hide

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

#4

投稿記事 by hide » 3年前

プロジェクト中の他のコードが一切動作しない状態にしたうえで、このコードだけを動かしても同様ですか?

アバター
夢幻ノ月夜
記事: 133
登録日時: 4年前
住所: Stens;Gate世界線

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

#5

投稿記事 by 夢幻ノ月夜 » 3年前

hide さんが書きました:プロジェクト中の他のコードが一切動作しない状態にしたうえで、このコードだけを動かしても同様ですか?
VC++に怒られてしまう箇所がDrawRotaGraphの呼び出しのタイミングになってるんですが
これ関係あるんですかね?(引数は不正な値ではないっぽい)
毎回なんかしらの場所のDrawRotaGraphで止められてしまいます
毎回ゲーム作ろうとするたびに壁にぶち当たる

閉鎖

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