值我正在讀.dat文件的內容,並填入一unordered_map是這樣的:檢索的unordered_map
bool FileManager::LoadSkillList(LPCSTR name)
{
int counter = 0;
std::ifstream myFile(name, std::ios::binary | std::ios::out);
if(myFile.fail())
{
myFile.close();
return false;
}
char skill[0x12C];
ZeroMemory(skill,0x12C);
char buff[100];
while(counter != TOTAL_SKILLS)
{
myFile.read(skill,0x12C);
if(myFile.gcount() < 1) continue;
auto skillBlock = (SkillInfo*)&skill;
#ifdef _DEBUG
char* skillName = skillBlock->szSkillName;
int delay = skillBlock->delayTime;
wsprintf(buff,"Skill Name: %s - Delay: %d\r\n",skillName,delay);
Log(buff);
#endif
this->skills.insert(std::make_pair(counter,skillBlock));
if(myFile.gcount() > 0) counter++;
myFile.seekg(counter * 0x12C);
}
#ifdef _DEBUG
Log("Skill count: %d\r\n",(int)this->skills.size());
#endif
myFile.close();
return (counter>0)?true:false;
}
當我嘗試找回LoadSkillList
方法中的映射值,它工作正常。但是我在FileManager類中有另一個方法,可以通過其他類訪問,以便檢索unordered_map值。
for(int skillNumber = 0; skillNumber < TOTAL_SKILLS; skillNumber++)
{
auto fileDelay = fManager->getDelay(skillNumber);
}
// ...
int FileManager::getDelay(int n)
{
auto block = this->skills.at(n);
return block->delayTime;
}
但不知何故,我的應用程序在該方法內崩潰。 (我正在構建一個dll,並且使用調試器對其進行了檢查。)
發生了什麼事情的任何線索?已經嘗試過std::array, std::map
沒有成功,都在同一個方法上崩潰。
你能否濃縮成一個**最小的,完整的,自成體系**的例子嗎? – 2012-07-17 16:53:04
你得到的例外是什麼? '.at()'可以拋出一個超出範圍的異常,例如,如果'n'是一個無效的索引... – AJG85 2012-07-17 16:54:56
我添加了一個'try/catch',但它甚至沒有被觸發,應用程序崩潰了第一個 – 2012-07-17 17:05:55