我正在努力的一个C项目在抛出第一次机会异常时终止.当我第一次尝试访问映射< pair< int,int>,int>时,这在Visual Studio 2008中以调试模式发生.其中包含一个键值对.代码没有任何逻辑错误.
我已经阅读了第一次机会异常,并了解它们可能并不总是有问题.尽管如此,我试图打破所有这些异常,并且正如预期的那样,发现了几个没有引起任何问题.
我正在处理的类非常大,包含许多自定义内存分配.我猜测其中一个导致了这个问题.然而,我花了几个小时试图找到一种方法来识别出错的地方,并且无法这样做.
下面列出了第一次机会异常输出.这不是很有帮助!
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00. First-chance exception at 0x0050ae33 in theapp.exe: 0xC0000005: Access violation reading location 0x00000010. Unhandled exception at 0x0050ae33 in theapp.exe: 0xC0000005: Access violation reading location 0x00000010.
我现在真的很挣扎,不确定如何继续.
任何人都可以建议我如何解决这个问题,并确切地确定出现了什么问题?我非常感谢你的建议.
UPDATE
这是相关的代码.调试器在嵌套FOR中列出的第一个cout语句中断:
// Inside operator() : map<pair<int,int> resultIdByStructIds; pair<int,int> spair (-1,-1); // Structure pair ids reusable reference. int nextMapEntryId = 0; int nextNumCandidates = 0; // For each remaining candidate. for (int ci = 0; ci < numCandidates; ) { // If candidate has been mapped or found not viable this mapping round,// move past it. if (candidatesDoneThisRound[ci] == currentMappingRoundId) { ++ci; continue; } Candidate candidate = candidates[ci]; const int tId = candidate.tVertexId; const int pId = candidate.pVertexId; // Grab the result for this structure pair. // Create it if it doesn't exist. // Avoid copying as slight optimisation; simply // store pointer to true result instead. spair.first = tInfos[tId].structure->id; spair.second = pInfos[pId].structure->id; // DEBUG cout << "resultIdByStructIds size: " << resultIdByStructIds.size() << endl; for (map<pair<int,int>::const_iterator ids_id = resultIdByStructIds.begin(); ids_id != resultIdByStructIds.end(); ++ids_id) { cout << ids_id->first.first << endl; // * Debugger breaks here. cout << ids_id->first.second << endl; cout << ids_id->second << endl; printf("Structures(%i,%i) => %i\n",ids_id->first.first,ids_id->first.second,ids_id->second); } // // code continues...
更新2
这是有问题的地图的鼠标悬停描述的图像;如Michael Burr建议的那样,它似乎已经腐败了