ページ 11

RAWファイルを読み込み、書き出すプログラム

Posted: 2012年10月21日(日) 21:46
by いちこ
初心者ですが、宜しくお願いします。
ただ今、既存のRAWファイルを読み込み、書き出すだけのプログラムを作成しています。

コンパイルは通ったのですが、実行をすると、「問題が発生したため、プログラムが正しく動作しなくなりました。このプログラムを閉じてください。」と警告が出てきて、プログラムが止まってしまいます。
どこを改善すればよいのかわかりません。
勉強不足で申し訳ありませんが、ご教示いただけるとうれしいです。
宜しくお願いします。

コード:

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	FILE *fp1,*fp2;
	unsigned char buf[1600*1600];
	int i;


	//入力画像(RAWファイル)のオープン
	if((fp1=fopen("Landsat1.gray","rb"))==NULL){
		printf("ファイルオープンエラー\n");
		return 1;
	}

	//出力画像(RAWファイル)のオープン
	if((fp2=fopen("OutSample.gray","wb"))==NULL){
		printf("ファイルオープンエラー\n");
		return 1;
	}

	
	//入力画像の読み込み
	for(i=0; i<1600*1600; i++){
		fread(&buf[i],1,1,fp1); //配列bufにデータを読み込む
	}

	
	//出力画像の書き出し
	for(i=0; i<1600*1600; i++){
		fwrite(&buf[i],1,1,fp2); //配列bufからデータを書き出す
	}

	fclose(fp1);
	fclose(fp2);

	return EXIT_SUCCESS;
}

Re: RAWファイルを読み込み、書き出すプログラム

Posted: 2012年10月21日(日) 22:04
by nil
バッファオーバーランは起こしていないようですが……
デバッガとブレークポイントを使ってどこでエラーが起きているのかを把握できますか?

Re: RAWファイルを読み込み、書き出すプログラム

Posted: 2012年10月21日(日) 22:18
by ジンセイ
ウィンドウズのスタックサイズはいくつか知りませんが、
スタックが溢れてしまっている可能性が高いと思います。
試しに以下のように書き換えてみるとどうでしょう?

- unsigned char buf[1600*1600];
+ static unsigned char buf[1600*1600];

Re: RAWファイルを読み込み、書き出すプログラム

Posted: 2012年10月21日(日) 22:25
by tamaneko
unsigned char buf[1600*1600];
澄みません、計算が苦手で分らないのですが、これ何バイトになるんですか?
2.56Mバイトでしょうか?

Re: RAWファイルを読み込み、書き出すプログラム

Posted: 2012年10月21日(日) 22:29
by いちこ
>>涼雅さん
返信ありがとうございます。
デバッガとブレークポイントはまだ一度も使ったことがなく、とても疎いので、今すぐに把握することはできません><
せっかく指摘していただいたのに申し訳ありません。今後、使用を試みようと思います。

>>ジンセイさん
返信ありがとうございます。
書き換えてみたことろ、ちゃんとファイルを生成することができました!
ありがとうございます!

>>tamanekoさん
返信ありがとうございます。
2500KBくらいになると思います。

Re: RAWファイルを読み込み、書き出すプログラム

Posted: 2012年10月21日(日) 22:42
by いちこ
解決にチェックを入れるのを忘れておりました。
みなさん本当にありがとうございました。