レポートで1024×1024ピクセルの画像を、間引いて256×256の画像にしろというのが出されました。画像はrawファイルです。
それで、とりあえず画像を読み込んで、出力するプログラムを書いてみたんですが、コンパイルは出来るのに実行すると不正な処理とけいこくがでてきてしまいます。
ソースは
#include<stdio.h>
main()
{
unsigned char in[1024][1024],out[1024][1024];
FILE *fp;
int i,j;
fp=fopen("aaa.raw","rb");
fread(in,sizeof(unsigned char),1024*1024,fp);
fclose(fp);
for(i=0;i<1024;i++){
for(j=0;j<1024;j++)
out[i][j]=in[i][j];
}
fp=fopen("bbb.raw","wb");
fwrite(out,sizeof(unsigned char),1024*1024,fp);
fclose(fp);
}
です。
どこがいけないのかアドバイスいただきたいです。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
こんにちわ。
#2 のmuyoshid です。
取りあえず、もう少し小さい単位でread/write する方法のプログラムを
記載してますので、参考にしてみて下さい。
※ BUF_SZ の値を変更すると、read/write サイズを変更できます。
#include <stdio.h>
#define IN_FILE "aaa.raw"
#define OUT_FILE "bbb.raw"
#define BUF_SZ 8192 // Buffer Size
static int fcopy(FILE *, FILE *);
main()
{
FILE *rfp, *wfp;
int rinf;
rfp = fopen(IN_FILE, "rb");
if (((FILE *)NULL) == rfp) {
printf("File \"%s\" cannot open.\n", IN_FILE);
exit(-1);
}
wfp = fopen(OUT_FILE, "wb");
if (((FILE *)NULL) == wfp) {
printf("File \"%s\" cannot open.\n", OUT_FILE);
exit(-1);
}
rinf = fcopy(rfp, wfp);
fclose(rfp);
fclose(wfp);
printf("fcopy() = %d\n", rinf);
exit(rinf);
}
static int
fcopy(FILE *rfp, FILE *wfp)
{
unsigned char in_buf[BUF_SZ], out_buf[BUF_SZ];
int rinf;
while(!feof(rfp)) {
rinf = fread((void *)in_buf, 1, BUF_SZ, rfp);
if (rinf < 0) {
printf("File read error.\n");
return(-1);
}
memcpy((void *)out_buf, (void *)in_buf, BUF_SZ);
rinf = fwrite((void *)out_buf, 1, rinf, wfp);
if (rinf < 0) {
printf("File write error.\n");
return(-1);
}
}
return(0);
}
わざわざありがとうございます。とても参考になりました。
何箇所か分からない関数もあったけど、なんとかなりました。
ありがとうございます。
No.2
- 回答日時:
こんにちわ。
mickjey2 さんもおっしゃられていますが、Stack Orverflow の可能性
が高いですね。
→ ローカル変数が獲得される領域を超えて、変数を宣言したと言う事です。
解決策としては、
1) malloc で領域を獲得する。
2) in, out 変数をmain 関数の外で宣言する。
3) 一気にデータを読まずに、もう少し小さい単位でデータをread/write する。
といったところでしょうか?
No.1
- 回答日時:
>unsigned char in[1024][1024],out[1024][1024];
動的に malloc などで確保するようにしてみてください。
これでは一つの配列のサイズが、1Mbyteになります。
実行時にこのサイズが確保できていない可能性が高いです。
一般に静的に確保できる変数のサイズはそれほど大きくありません。
回答ありがとうございます。
お礼遅くなってすいません。mallocの使い方がわからなくて調べたりしてたら遅くなっちゃいました。
なんとか動きました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# 100バイトのバイナリファイルを読み込んで別のファイルに書き込みたいのですが、型をどうすればいいのか 1 2022/11/03 17:11
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
空白を含んだ文字列がうまく格...
-
#defineが使用するメモリ領域に...
-
C言語のプログラムで、途中で止...
-
C言語で複数列のデータを1列の...
-
信頼区間の1.96や1.65ってどこ...
-
C言語での引数の省略方法
-
2÷3などの余りについて
-
プログラミング初心者です。 Py...
-
「Aに対するBの割合」と「Aに対...
-
Aの値からBの値を除するとは??
-
「指定されたキャストは有効で...
-
ある商品のロス率を5%見込み、...
-
#define _CRT_SECURE_NO_WARNIN...
-
マイナスからプラスへ転じた時...
-
プログラムでの数字につく”f”の...
-
【gcc・cygwin】multiple defin...
-
再起呼び出しの回数をカウント...
-
charでの計算?
-
変数とパラメータとは違うもの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
#defineが使用するメモリ領域に...
-
C言語で複数列のデータを1列の...
-
printf による16進表示について
-
【C言語】全角文字の配列を、全...
-
空白を含んだ文字列がうまく格...
-
char型2つを結合し、short型に...
-
reallocでエラー
-
矢印キーを押下してコンソール...
-
C言語でのCSVファイルの読み出...
-
C++で指定文字列のカウント方法...
-
リストの作成と出力(C言語)
-
終了条件Ctrl+zについて,結果表...
-
ファイル操作で全角空白を消す
-
エラーについて質問です。
-
fscanfの使い方
-
WinInetのInternetOpenUrl関数...
-
構造体メンバの初期化
-
C言語のプログラムで、途中で止...
-
ファイルから数字列を16進数の...
おすすめ情報