• 締切済み

fread エラー C Xcode bmpファイル

こんにちは。プログラム初心者の大学生です。 現在研究室で作成しているプログラムについて、自身で解決できないエラーが出たため、 お詳しい方に教えていただけないものかと思い投稿しました。 以下のプログラムで、32ビットbmpファイルのヘッダ情報を読み込み、表示させようとしています。 展望としてはヘッダ情報を誘致しておき、後々参照する予定です。 プログラムはMacのXcode(C言語)で作成しているのですが、 fread(PictureHeadBuf, sizeof(unsigned char), 54 ,fpIN); の行で EXC_BAD_ACCESS と表示され、うまく動作しません。 配列のメモリ管理がどうも怪しそうですが、具体的な解決方法がわからない状態です。 なかなか先に進めずに困っています。もし原因のわかる方がいらっしゃれば教えてください。 ぜひよろしくお願い致します。 #include <stdio.h> #include <stdlib.h> /* 入力画像ファイル関連 */ #define FILE_NAME "test.bmp" /* 元データのファイル名 */ int main(void){ int i; /* 入力画像ファイル関連変数 */ FILE *fpIN; unsigned char PictureHeadBuf[54]; /* ヘッダ用バッファ */ unsigned char Header[54]; /* ヘッダの誘致先 */ /*入力画像ファイルをオープン*/ fpIN = fopen(FILE_NAME, "rb"); /*ヘッダ(ファイルヘッダ,情報ヘッダ)の格納 */ fread(PictureHeadBuf, sizeof(unsigned char), 54 ,fpIN); for(i = 0; i < 54; i++){ Header[i] = PictureHeadBuf[i]; printf("%d\n", Header[i]); } /* 入力画像をクローズ */ fclose(fpIN); return(0); }

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

一応確認ですが, どのように実行してますか? まあ私も Mac は触っていないのでわかったところで何ともならんような気はしますが, 統合環境を使ってたりすると「カレントディレクトリ」と思っているところが「実行時のカレントディレクトリ」ではなかったりすることもあるので.

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>ただ、使用する画像ファイルはカレントディレクトリにあるのにオープンできていません。 >(つまりオープンできないのは変わらず…) エラーが発生したなら、詳細な情報を取得できる方法があるかと思いますが……。 errno変数とかになんか入っていないですか? # 前回回答の通り、Macは使っていないので詳細は不明です。 MACで出来るかは不明ですが… http://www.ibm.com/developerworks/jp/opensource/aix/library/au-errnovariable/ とか。 その上で……ファイルが間違いなくあるのにアクセスできないのであれば、パーミッションの問題だったりしませんか? ファイルの所有者が管理者(root?)で、所有者以外には読み込み権限が無い。 とか……。 # Linuxだと、他にSELinuxで制限されている。なんて場合もあったりしますけど。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

[技術者向] コンピューター > プログラミング > C・C++ ってカテゴリあるんですが………。 Macの方はよくわかりませんが、掲示されているコードから言えることだけ…。 >/*入力画像ファイルをオープン*/ >fpIN = fopen(FILE_NAME, "rb"); で、オープンはちゃんと成功しているんですか? fpINがNULLになっていないかエラー処理省いているのは「絶対成功する」からですか? カレントディレクトリにtest.bmpというファイルがないと普通は失敗するんですけど……。 オープンに失敗していれば、fread()も成功することはないのですが、どうですか? 同じ研究室の方が知恵袋で質問していて…似たような回答付いてはいるようですが。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1199175241

m_w30
質問者

お礼

お返事ありがとうございます。 カテゴリ分けの件見逃していました…すみません。 ご指摘の通り、ファイルオープンに失敗していたようです。 失敗したときのエラー処理を書き加えると、エラーは出現しなくなりました。 ただ、使用する画像ファイルはカレントディレクトリにあるのにオープンできていません。 (つまりオープンできないのは変わらず…) これの原因にお心当たりなどないでしょうか?><