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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
bonbo

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

#1

投稿記事 by bonbo » 13年前

早速ですが質問させていただきます。
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)です。
よろしくお願いします。

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

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

#2

投稿記事 by h2so5 » 13年前

fopen自体は成功しているのでしょうか。
他の部分が問題かもしれませんし、このコードだけでは部分的すぎて分からないです。

bonbo

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

#3

投稿記事 by bonbo » 13年前

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

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

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

#4

投稿記事 by h2so5 » 13年前

状況を再現できる最小コードを貼ってください。
情報が少なすぎるので回答できません。

bonbo

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

#5

投稿記事 by bonbo » 13年前

>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;
一応こんなコードですが…

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

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

#6

投稿記事 by h2so5 » 13年前

Windowsで32bitで動かしていたプログラムをMac OS Xでは64bitで動かしているとか、またその逆ということはないですか?
そこが問題になっている可能性もあります。

bonbo

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

#7

投稿記事 by bonbo » 13年前

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

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

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

#8

投稿記事 by h2so5 » 13年前

貼ってもらったコードだけではまだ不完全です。
プロジェクトファイルごとアップロードしてもらった方が早いと思います。

bonbo

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

#9

投稿記事 by bonbo » 13年前

>h2so5さん
わかりました
申し訳ありません…これから用事があるので返信が遅れます…
日曜にはアップロードします…申し訳ありません…

bonbo

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

#10

投稿記事 by bonbo » 13年前

すみません。
できました。というか知らない間に直っていました。
結局原因がつかめなかったので不安ですが…

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

閉鎖

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