私は小さなプログラムを開発しましたが、コードの無関係な部分に実際に小さな変更を加えるまでは正常に機能していました。その時点から、プログラムは未処理のwin32例外をスローし、MicrosoftVisualStudioのジャストインタイムデバッガーが起動します。
私はコードブロックを使用していて、私のコンパイラはgccコンパイラです。イライラするのは、gdbを使用してコードブロックからデバッグすることを選択した場合にプログラムが正常に動作することです。これは私には意味がありません。
gdbを使用してデバッグして何が問題なのかを確認できないため(デバッグモードでは正常に実行されるため)、printfsをあちこちに配置してすべてのルートを見つけます。1つの関数で分離しましたが、意味がありません。
bool FileReader::readBitmap(int fileNum)
{
char check;
int dataOffset;
int dataSize;
string fileName;
//used for quick int to string conversion
std::ostringstream stringstream;
stringstream<<fileNum;
string fileNumber = stringstream.str();
fileName = "img"+fileNumber+".bmp";
ifstream stream(fileName.c_str(),ios::in|ios::binary);
stream.read(&check,1);
//checking if it is a bitmap file
if(check != 'B')
return false;
stream.read(&check,1);
if(check != 'M')
return false;
stream.seekg(BMPBPP);
stream.read(&check,1);
//if it is not a monochrome bitmap
if(((int)check) != 1)
return false;//quit
//get the dataoffset
stream.seekg(DATAOFFSET);
stream.read(&check,1);
dataOffset = (int)check;
//get the data size in bytes
stream.seekg(DATASIZEINBYTES);
stream.read(&check,1);
dataSize = (int)check;
//if this is the first image we read
if(firstImageRead)
{
//allocate the image buffer
imgBuffer = (char*) malloc(dataSize);
//and make sure it does not get re-allocated
firstImageRead = false;
}
//get the actual bitmap data
stream.seekg(dataOffset);
stream.read(imgBuffer,dataSize);
stream.close();
return true;
}
-大きな編集:問題が何であるかを見つけようとして、ifstreamを関数からクラスのプライベートメンバーに移動しました。また、この関数は、stream.open()を使用してファイルを開くこととまったく同じようになりました。
今では問題なく動作します。したがって、問題はどういうわけか...関数内で使用されるだけではなく、関数内で毎回初期化されるifstreamにあります。それでも...意味がなく、これは発生しないはずです。
私はここで何が問題だったのかを知ることに本当に興味がありますか?
正直なところ、これが何に起因するのか誰かが知っていますか?