ページ 11

引数が正常に渡せない

Posted: 2011年12月28日(水) 19:22
by White
はじめまして、初めて質問させていただきます。

使っている開発環境が紹介されているものと違うので申し訳ないのですが、
GCC( MinGW ) + SDL + C++ で開発をしているのですが、構造体へのポインタと引数を渡して関数
内で構造体のメンバの値を書き換えるという関数を作っていたのですが、一つのデータが別のデータに
書き換えられるという現象が起こってしまいうまく動作しません。形式は以下のような感じです(かなり省略してあります)。

コード:

typedef struct sBullet
{
   float x,y,vx,vy,ax,ay;
}Bullet;

void Func( Bullet *i, float ix, float iy, float ivx, float ivy, float iax, float iay )
{
   i->x = ix; i->y = iy;
   i->vx = ivx; i->vy = ivy;
   i->ax = iax; i->ay = iay;
   return;
}
このように構造体と関数を定義します
ここで、

コード:

   Bullet *b;
   b = new( Bullet );
   Func(  b, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 );
のようにコードを書くと実際の実行結果において

コード:

   b->x = 1.0;  b->y = 1.0;
   b->vx = 3.0;  b->vy = 3.0;
   b->ax = 5.0;  b->ay = 5.0;
のようになってしまいます。これはなぜ起こるのでしょうか?
チェックしてみましたが

コード:

   i->x = ix;  i->y = ix;
としているような間違いはありませんでした。
この関数を通さずに値を構造体に直接入力するときちんと入ります。
さらに関数のなかで定数を構造体に入力してもきちんと入ります。
関数に引数を渡すときになにか問題があるように思えますが。。。
メモリ不足かなにかでしょうか?それとも他に原因があるのでしょうか?
お願いします。

Re: 引数が正常に渡せない

Posted: 2011年12月28日(水) 19:54
by White
補足です。

関数を単体でテストしてみました。
簡略化していない実際のコードで試します。

コード:

#include <stdio.h>

typedef struct sBulletClass {
	int imgX, imgY, imgSizeX, imgSizeY;
	int maxLife;
	int power;
	int name;
	struct sBulletClass* next;
}BulletClass;

typedef struct sBullet {
	float x,y,ax,ay,vx,vy;
	int life;
	struct sBulletClass *pBulletClass;
	struct sBullet* next;
}Bullet;


Bullet* BuildBullet( int ibulletName, BulletClass *ibase, float _x, float _y, float _vx, float _vy, float _ax, float _ay  )
{
	Bullet *i;
	i = new( Bullet );
	i->x = _x; i->y = _y;
	i->vx = _vx; i->vy = _vy;
	i->ax = _ax; i->ay = _ay;
	//i->pBulletClass = FRP_BulletClass( ibase, ibulletName );
	//i->life = i->pBulletClass->maxLife;
	i->next = NULL;
	return i;
}

int main( void )
{
	Bullet *i;
	BulletClass *b;
	i = BuildBullet( 0, b, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5  );
	printf( "%f %f %f %f %f %f", i->x, i->y, i->vx, i->vy, i->ax, i->ay );
	return 0;
}
正常に動作しました。

0.000000 0.100000 0.200000 0.300000 0.400000 0.500000

となります。
・・・・なぜだ(;;)

Re: 引数が正常に渡せない

Posted: 2011年12月28日(水) 20:35
by White
解決しました;;;

なんと考えていた関数とは全く関係ない部分に間違いがありました。
申し訳ありません。 

これで解決とさせていただきます。
ご迷惑おかけしました。