ページ 11

ファイル書き込み

Posted: 2010年5月01日(土) 00:57
by pool
課題1.
ファイルを読み込んで、幅、高さ、を構造体に格納せよ。
課題2.
ファイルを読み込んで、幅、高さ、を構造体に格納せよ。

よろしくお願いします。 画像

Re:pgmファイルの読み込み、別ファイルへの書き込み

Posted: 2010年5月02日(日) 08:03
by ookami
PGMファイルって初めて知りました。この掲示板を見ていると本当に勉強になります^^

以下のサイトが参考になるかもしれません。
http://www.mm2d.net/c/c-09.shtml

> /*ここからよくわかりません*/
> value.x=&data;
> *value.x=data;

ここで、確保していないメモリ領域に値を書き込んでしまっているようです。「2次元配列の確保の仕方は以下のような感じ」を応用して、1次元配列を確保してはいかがでしょう。

Re:pgmファイルの読み込み、別ファイルへの書き込み

Posted: 2010年5月02日(日) 15:35
by pool
ご回答有難うございます。


画像

Re:pgmファイルの読み込み、別ファイルへの書き込み

Posted: 2010年5月02日(日) 16:16
by ookami
あら、てっきり「2次元配列の確保の仕方は以下のような感じ」はご自分で書いたものかと思っておりました。

PC上にメモリは膨大にありますが、プログラムはそのメモリのどこでも自由に使えるというわけではありません。処理系に「メモリをxxバイト確保せよ」と命令して、確保されたメモリだけを使えるのです。

http://www9.plala.or.jp/sgwr-t/lib/malloc.html
↑この辺が参考になるかと思います。

あと、
/*ここからよくわかりません*/
というのは、何かコンパイルエラーや実行時エラーがあったということでしょうか。あればそれも書き込んでもらえれば、回答が集まりやすいと思いますよ。

無題

Posted: 2010年5月02日(日) 16:41
by pool
説明不足でした。すいません。これは出された問題をそのまま載せました。 画像

Re:pgmファイルの読み込み、別ファイルへの書き込み

Posted: 2010年5月02日(日) 19:38
by ookami
課題に書かれている
  gi->x=(float **)malloc(gi->height*sizeof(float *));
の部分を理解する必要がありますね。

例えば、
  float arr[128];
  :
  :
と、
  float *arr;
  arr=(float*)malloc(128*sizeof(float));
  :
  :
  free(arr);
は、ほぼ同じ意味になります。ここまではよろしいですか?これを踏まえ、


  /*ここからよくわかりません*/
  value.x=&data;
  *value.x=data;
  size=width*height;
  for(i=0;i<size;i++){
   fscanf(fp,"%f",&data);
   printf("*x : %f\n", *value.x);
  }

の部分を、

size=width*height;
value.x=(float*)malloc(size*sizeof(float));
for(i=0;i<size;i++){
fscanf(fp,"%f",&data);
value.x=data;
printf("*x : %f\n",value.x);
}
こんな感じ(未確認)にします。ここまではどうでしょう?
元のソースのどこが間違っているか、というのが何とも説明しづらいのですが..

無題

Posted: 2010年5月06日(木) 22:49
by pool
>ookamiさん
丁寧に教えて頂きありがとうございました! 画像