シミュレーション結果をファイルからベクトルにロードしようとしています。このコードは、少量および中量のデータに適しています。大きなファイルをロードしようとすると、例外が発生します。プログラムをクラッシュさせる配列は、約 17000*7*3000 要素です。初期化をいくつかのステップに分割しようとしましたが、同様にクラッシュしました。それを機能させるために何かできることがあれば教えてください。
//////////////////////////////////////////////////////////
//Import of surface receivers file
for(int freq=0;freq<7;freq++)
{
filePath=filePath_old;
filePath.Replace(wxT("125 Hz"),wxString::Format(wxT("%i"), freqSTI[freq])+wxT(" Hz"));
if(importer.ImportBIN(filePath,mainData))
{
if(timeTable.size()==0){
for(int idstep=0;idstep<mainData.nbTimeStep;idstep++)
{
timeTable.push_back(mainData.timeStep*(idstep+1)*1000);
}
}
for(wxInt32 idrs=0;idrs<mainData.tabRsSize;idrs++)
{
for(wxInt32 idface=0;idface<mainData.tabRs[idrs].dataRec.quantFaces;idface++)
{
if(tab_wj.size()<idrs+1){
tab_wj.push_back(std::vector<std::vector<std::vector<wxFloat32> > > (mainData.tabRs[idrs].dataRec.quantFaces,std::vector<std::vector<wxFloat32> >(7,std::vector<wxFloat32>(mainData.nbTimeStep,0.f))));
}
//Pour chaque enregistrement de cette face
int tmp=mainData.tabRs[idrs].dataFaces[idface].dataFace.nbRecords;
for(wxInt32 idenr=0;idenr<mainData.tabRs[idrs].dataFaces[idface].dataFace.nbRecords;idenr++)
{
t_faceValue* faceval=&mainData.tabRs[idrs].dataFaces[idface].tabTimeStep[idenr];
tab_wj[idrs][idface][freq][faceval->timeStep]=faceval->energy;
}
}
}
}
}
例外が発生する場所はtab_wj.push_back...
初期化を複数のステップに分割しようとしたとき、次のように書きました。
std::vector<wxFloat32> t1(mainData.nbTimeStep,0.f);
std::vector<std::vector<wxFloat32> > t2(7,t1);
std::vector<std::vector<std::vector<wxFloat32> > > t3(mainData.tabRs[idrs].dataRec.quantFaces,t2);
その後、これらの行の最後の 1 つでクラッシュしました。
助けてくれてありがとう!