ページ 11

Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 12:44
by bonbo
早速ですが質問させていただきます。
Windowsで作ったプログラムをmacでも使えるようにしようと思い、
Xcodeを使って書き換えていたのですが、fopenすると正しく値が読み込めません。(intを読み込んでいるはずなのにlongの値が入っていたり,BAD_ACCESSになったりetc)
VisualStudioを使っていたときは全く問題なく動いていたので困惑しています。

以下のコードです。

コード:

	FILE *fp;
	fp = fopen("users/../Data.test","rb");
	if(fp==NULL){
		fclose( fp ) ;
		//エラーメッセージ
		return -1;
	}
//以降freadで読み込み
調べたところ、iOSではメモリ確保がどうたらみたいなのがいろいろ見つかったのですが、fopenも仕様が違うのでしょうか。
環境はXcode4.4,macBookAir(Lion)です。
よろしくお願いします。

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 12:50
by h2so5
fopen自体は成功しているのでしょうか。
他の部分が問題かもしれませんし、このコードだけでは部分的すぎて分からないです。

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 12:59
by bonbo
>h2so5さん
ありがとうございます
>fopen自体は
else
NSLog(@"fopen OK");
を追加したところ、fopen OKが表示されたので成功はしています。
これ以降ずっとfreadで、(読み込む配列をオーバーしたりもしていない)
貼るとめちゃくちゃ長くなっちゃうと思い遠慮しておきました。

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 13:07
by h2so5
状況を再現できる最小コードを貼ってください。
情報が少なすぎるので回答できません。

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 14:03
by bonbo
>h2so5さん
ありがとうございます

コード:

	
#define TEST1 50
#define UMAX 110
#define VMAX 110
#define LMAX 6

	typedef struct{
		int Bnumber;
		int Hmax;
		int ang;
		int Tur;
	}BOX_t;

	BOX_t BOX[UMAX][VMAX][LMAX];
	FILE *fp;
	int instantstates=0;
	int instantEvNumber=0,instEvX=0,instEvY=0;
	int instUmax[TEST1],instVmax[TEST1];
	int Num=0;
	int Mmax=2;
	int Ha[UMAX][VMAX];
	fp = fopen("Data.test","rb");
	if(fp==NULL){
		fclose( fp ) ;
		
		return -1;
	}
	fread(&Mmax,sizeof(int),1,fp);
	if(Num>Mmax){
		fclose( fp ) ;
		
		return -2;
	}
	for(int mp=0;mp<=Mmax;mp++)
	{
		fread(&instUmax[mp],sizeof(int),1,fp);
		fread(&instVmax[mp],sizeof(int),1,fp);
	}
	for(int mp=0;mp<=Mmax;mp++)// ここはイコール入る。Mmaxは"ある"。
	{

		if(mp==Num){//
			for(int i=0;i<UMAX;i++)// UMAXは"ない"。
				for(int j=0;j<VMAX;j++){// VMAXは"ない"。
					for(int lay=0;lay<LMAX;lay++)
					{
						BOX[i][j][lay].Bnumber=0;
						
					}
					Ha[i][j]=0;
				}
			Umax=instUmax[mp];
			Vmax=instVmax[mp];
		}
		for(int i=0;i<=instUmax[mp];i++)// ここはイコール入る。instUmax[mp]は"ある"。
			for(int j=0;j<=instVmax[mp];j++)// ここはイコール入る。instVmax[mp]は"ある"。
			{
				fread(&BOX[i][j][3].Hmax,sizeof(int),1,fp);
				for(int lay=0;lay<LMAX;lay++)
				{
					fread(&BOX[i][j][lay].Bnumber,sizeof(int),1,fp);
					fread(&BOX[i][j][lay].ang,sizeof(int),1,fp);
					fread(&BOX[i][j][lay].Tur,sizeof(BOOL),1,fp);
				}
				fread(&Ha[i][j],sizeof(int),1,fp);
				fread(&instantstates,sizeof(int),1,fp);
				fread(&instantEvNumber,sizeof(int),1,fp);
				fread(&instEvX,sizeof(int),1,fp);
				fread(&instEvY,sizeof(int),1,fp);
				fread(&instantstates,sizeof(int),1,fp);
			}
		if(mp==Num)goto END;
	}
END:
	fclose( fp ) ;
	return 0;
一応こんなコードですが…

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 14:30
by h2so5
Windowsで32bitで動かしていたプログラムをMac OS Xでは64bitで動かしているとか、またその逆ということはないですか?
そこが問題になっている可能性もあります。

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 14:56
by bonbo
>Windowsで32bitで動かしていたプログラムをMac OS Xでは64bitで動かしているとか、またその逆ということはないですか?
使っているwindows7が64bitでMacではIntel corei5(64bit)です。
やっぱり別のところに問題があるのでしょうか…
Xcodeも2回1回ビルドが失敗したり動作がおかしいですし…

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 15:26
by h2so5
貼ってもらったコードだけではまだ不完全です。
プロジェクトファイルごとアップロードしてもらった方が早いと思います。

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月14日(金) 15:35
by bonbo
>h2so5さん
わかりました
申し訳ありません…これから用事があるので返信が遅れます…
日曜にはアップロードします…申し訳ありません…

Re: Xcodeでfopenを使うと正しく読み込めない

Posted: 2012年12月16日(日) 23:38
by bonbo
すみません。
できました。というか知らない間に直っていました。
結局原因がつかめなかったので不安ですが…

とりあえずありがとうございました