Class内における変数について
Posted: 2016年3月18日(金) 20:36
Microsoft Visual C++ 2010 Expressにてコンソールプログラムを作成しています。
以下のようなクラス宣言(?)をBMP.hで行い、
以下の関数を作成しました。
これを実行すると、最初に出てくるOffSet、BitSizeは想定通りの値となります。
しかし、freadを通過すると、OffSetは65280に、BitSizeは-1になってしまいます。
一方、Class宣言内の変数宣言を削除し、関数内で変数宣言を行うとそのようなことは起こりません。
これは何故でしょうか?
以下のようなクラス宣言(?)をBMP.hで行い、
class C_BMP
{
FILE *lf;
unsigned char StrBuf[32];
int OffSet, BitSize;
public:
void Init( char PicData[][250] );
};
void C_BMP::Init( char PicData[][250] )
{
int i = 0;
int j = 0;
OffSet = 0;
BitSize = 0;
memset( StrBuf, 0, 32 );
fopen_s(&lf, "test.bmp", "rb");
fread(StrBuf, sizeof( unsigned char ), 30, lf);
for (i=0 ; i<4 ; i++)
{
OffSet += StrBuf[i+10]*pow(256.0,i);
}
for (i=0 ; i<2 ; i++)
{
BitSize += StrBuf[i+28]*pow(256.0,i);
}
BitSize /= 8;
fread(StrBuf, sizeof( unsigned char ), OffSet-30, lf);
for (i=0 ; i<250 ; i++ )
{
for (j=0 ; j<250 ; j++ )
{
fread(StrBuf, sizeof( unsigned char ), BitSize, lf);
if ( (StrBuf[0]+4*StrBuf[1]+2*StrBuf[2])/7 != 255 )
{
PicData[249-i][249-j] = 1;
} else
{
PicData[249-i][249-j] = 0;
}
}
}
fclose(lf);
}しかし、freadを通過すると、OffSetは65280に、BitSizeは-1になってしまいます。
一方、Class宣言内の変数宣言を削除し、関数内で変数宣言を行うとそのようなことは起こりません。
これは何故でしょうか?