ポインターがループしているうちに急にマイナスになってしまいます。
記述が間違っているでしょうか?
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);
とりあえず……HeightとWidthの値はいくつになっているんでしょう?
fAやfBが正常にオープンできているんですかね?
とか、
char *outって結局使っていないよね?
とか、
fgetc()で読み込むよりはfread()で読み込んだ方が簡単じゃないかなぁ…
とかありますけど。
1MB = 2^20 = 1048576
オーバーすることも考えて1100000ぐらいに設定しておいた方がいいですね。
Visual-Cのスタックは、1MBだったとおもいます。
mallocではなくC++のnewもしくはwindowsの関数を使った方がいいですね。
画像処理に使うみたいですので4MBぐらい確保しておいた方が安全では?
解答、遅くなりましてすみません。
皆様、ご回答、ありがとうございます。
HeightとWidthは、それぞれ、600くらいです。
4MBですね。やってみます。
それぞれの変数の方に対して表現可能な数の上限、下限がありますので
それをきちんと理解して変数の方を決定する必要があります。
intという型は開発環境によってサイズが変わることがあるので
自分が使っている開発環境でintサイズが何バイトで表現可能な数の上限、下限が
いくつになるのかをちゃんと調べてみてください。
C++言語は変数の上限以上に数を増やそうとした時にどういう挙動になるのか
という点も勉強した方がよいと思います。
CやC++言語は、変数やメモリの管理を開発者が自前で行う必要があります。
確保している変数の領域を超えるようなデータの格納はメモリ内の他のデータを
破壊することもあり得ますので注意が必要です。
特にポインタを使っている場合、使っているアドレスをきちんと
理解したうえで使用しないとアクセスしてはいけない領域にアクセスして
データを破壊したり、プログラムが暴走したりしますので注意してください。
あうあう。
誤)
それをきちんと理解して変数の方を決定する必要があります。
正)
それをきちんと理解して変数の型を決定する必要があります。
あと、状況によってsignedとunsignedの使い分けが必要になる場合があります。
とにかくデータ型に関してはしっかり理解して自分が扱うデータが
変数に格納できる範囲を超えないようにコントロールしてください。
皆様、いろいろ、アドバイスありがとうございました。
お蔭様で、何とか、動くようになりました。