Я разработал небольшую программу, которая работала нормально, пока я не внес действительно незначительные изменения в какую-то не связанную часть кода. С этого момента программа выдает необработанное исключение win32 и запускается отладчик Microsoft Visual Studio.
Я использую кодовые блоки, и мой компилятор - это компилятор gcc. Что расстраивает, так это то, что программа работает нормально, если я выбираю отладку из кодовых блоков с помощью GDB. Это то, что не имеет смысла для меня.
Поскольку я не могу отладить с помощью gdb, чтобы увидеть, что не так (потому что он отлично работает в режиме отладки), я поместил printfs тут и там, чтобы найти корень всего этого. Я изолировал в одной функции, но это просто не имеет смысла.
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;
}
-BIG- EDIT: пытаясь выяснить, в чем может быть проблема, я переместил ifstream из функции в личный член класса. И функция теперь делает ТОЧНО то же самое, только если она использует stream.open (), чтобы открыть файл.
Теперь все работает без проблем. Таким образом, проблема заключается как-то ... в том, что ifstream инициализируется каждый раз внутри функции, а не просто используется внутри функции. Тем не менее ... не имеет смысла, и это не должно было произойти.
Я действительно заинтригован, чтобы выяснить, в чем здесь проблема?
Честно говоря, у кого-нибудь есть идеи, к чему это можно отнести?