100万バイト(1MB)ほど、画像処理用に確保したいのですが。。。 – プログラミング – Home

100万バイト(1MB)ほど、画像処理...
 

[解決済] 100万バイト(1MB)ほど、画像処理用に確保したいのですが。。。  

  RSS

ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
参加済み: 14年 前
投稿: 33
2018年8月28日 10:38 AM  

ポインターがループしているうちに急にマイナスになってしまいます。
記述が間違っているでしょうか?
FILE *fA;
FILE *fB;
int Width,Height;
int x,y;
int RGB;
size_t size = 1000000;
char *in = (char *)malloc( sizeof(char) * size );
char *out = (char *)malloc( sizeof(char) * size );

for (y=0;y<Height;y++)
for (x=0;x<Width;x++)
for (RGB=0;RGB<3;RGB++)
{
*(in+3*(y*Width+x)+RGB) = fgetc(fA); <== 144 ループ目で、
fputc(*(in+3*(y*Width+x)+RGB),fB); 収める側のaddressが読み取れず
}

fclose(fA);
fclose(fB);

free(in);
  free(out);


引用未解決
トピックのタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
参加済み: 13年 前
投稿: 178
2018年8月28日 1:22 PM  

とりあえず……HeightとWidthの値はいくつになっているんでしょう?

fAやfBが正常にオープンできているんですかね?
とか、
char *outって結局使っていないよね?
とか、
fgetc()で読み込むよりはfread()で読み込んだ方が簡単じゃないかなぁ…
とかありますけど。


返信引用
ITO
 ITO
(@ITO)
ゲスト
参加済み: 18年 前
投稿: 1235
2018年8月30日 5:16 PM  

1MB = 2^20 = 1048576
オーバーすることも考えて1100000ぐらいに設定しておいた方がいいですね。
Visual-Cのスタックは、1MBだったとおもいます。
mallocではなくC++のnewもしくはwindowsの関数を使った方がいいですね。
画像処理に使うみたいですので4MBぐらい確保しておいた方が安全では?


返信引用
ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
参加済み: 14年 前
投稿: 33
2018年9月3日 5:53 PM  

解答、遅くなりましてすみません。
皆様、ご回答、ありがとうございます。
HeightとWidthは、それぞれ、600くらいです。
4MBですね。やってみます。


返信引用
PATIO
 PATIO
(@PATIO)
ゲスト
参加済み: 18年 前
投稿: 2655
2018年9月29日 9:03 PM  

それぞれの変数の方に対して表現可能な数の上限、下限がありますので
それをきちんと理解して変数の方を決定する必要があります。
intという型は開発環境によってサイズが変わることがあるので
自分が使っている開発環境でintサイズが何バイトで表現可能な数の上限、下限が
いくつになるのかをちゃんと調べてみてください。

C++言語は変数の上限以上に数を増やそうとした時にどういう挙動になるのか
という点も勉強した方がよいと思います。
CやC++言語は、変数やメモリの管理を開発者が自前で行う必要があります。
確保している変数の領域を超えるようなデータの格納はメモリ内の他のデータを
破壊することもあり得ますので注意が必要です。
特にポインタを使っている場合、使っているアドレスをきちんと
理解したうえで使用しないとアクセスしてはいけない領域にアクセスして
データを破壊したり、プログラムが暴走したりしますので注意してください。


返信引用
PATIO
 PATIO
(@PATIO)
ゲスト
参加済み: 18年 前
投稿: 2655
2018年9月29日 9:04 PM  

あうあう。

誤)
それをきちんと理解して変数の方を決定する必要があります。

正)
それをきちんと理解して変数の型を決定する必要があります。


返信引用
PATIO
 PATIO
(@PATIO)
ゲスト
参加済み: 18年 前
投稿: 2655
2018年9月29日 9:07 PM  

あと、状況によってsignedとunsignedの使い分けが必要になる場合があります。

とにかくデータ型に関してはしっかり理解して自分が扱うデータが
変数に格納できる範囲を超えないようにコントロールしてください。


返信引用
ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
参加済み: 14年 前
投稿: 33
2018年10月7日 7:36 AM  

皆様、いろいろ、アドバイスありがとうございました。
お蔭様で、何とか、動くようになりました。


返信引用

返信する


Preview 0 Revisions Saved
Share:

ログイン または 登録 してください

タイトルとURLをコピーしました