В моем приложении я сохраняю воксельные данные (сжатый байтовый массив) и пытаюсь снова загрузить их в память.
Но мое приложение вылетает на машине с Windows 7 (64 бит, 12 ГБ), давая bad_alloc.
Это прекрасно работает в Linux и даже работает на некоторых других машинах Windows 7 с 4 ГБ памяти.
Размер сжатого байта составляет около 200 МБ, а размер несжатого байта - около 300 МБ (так что всего 500МБ зарезервировано до этого «нового» оператора, что оставляет почти 8 ГБ без учета системной памяти).До этого я не выполнял никаких других основных этапов выделения памяти, поэтому не думаю, что память фрагментирована.Я пользуюсь MinGW GCC
версия 4.5.0
Любые советы по этому поводу?
заранее спасибо.
QFile fileVol(strVFile);
//Read VolumeData
fileVol.open(QIODevice::ReadOnly);
QDataStream volstream(&fileVol);
QByteArray volCmprsdByteArray; //This holds the compressed byte array
//Read some additional information
int nx, ny, nz, bbp;
int voltype;
volstream >> nx;
volstream >> ny;
volstream >> nz;
volstream >> bbp;
volstream >> voltype;
volstream >> volCmprsdByteArray; //read our compressed voxel-data
//we have original uncompressed pixel data
QByteArray volUncmprsdByeArray = qUncompress(volCmprsdByteArray);
int uncompressedSize = volUncmprsdByeArray.size(); // size of the byte array
qDebug("new char for uncompressed data size %d",uncompressedSize);
unsigned char* volumeData=NULL;
//Trying to allocate new memory
try {
// ##### breaks here. ####
volumeData =new unsigned char[uncompressedSize];
}
catch (std::bad_alloc e)
{
cout << "lu_solver() bad_alloc: " << e.what() << endl;
cout << "Size " << uncompressedSize << endl;
//return;
}