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

100万バイト(1MB)ほど、画像処理...
 
通知
すべてクリア

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


ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
結合: 16年前
投稿: 33
Topic starter  

ポインターがループしているうちに急にマイナスになってしまいます。
記述が間違っているでしょうか?
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);


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 15年前
投稿: 178
 

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

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


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 19年前
投稿: 1235
 

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


返信引用
ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
結合: 16年前
投稿: 33
Topic starter  

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3か月前
投稿: 2656
 

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3か月前
投稿: 2656
 

あうあう。

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3か月前
投稿: 2656
 

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

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


返信引用
ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
結合: 16年前
投稿: 33
Topic starter  

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました