我在我的应用程序中遇到了这个问题。点击调试按钮提供了这个细节:
Exception thrown: write access violation.
std::map<ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >,bool [52],std::less<ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > > >,std::allocator<std::pair<ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > > const ,bool [52]> > >::operator[](...) was 0x111026CE50857E9.
If there is a handler for this exception, the program may be safely continued.
它倒下的代码是:
m_mapStudentAssignedStudyPoints[strName][iStudyPoint] = false;
该变量的定义:
const int kMaxStudyPointCount = 52;
typedef map<CString, bool[kMaxStudyPointCount]> AssignedStudyPoints;
AssignedStudyPoints m_mapStudentAssignedStudyPoints;
我很乐意为您提供示例应用程序,但它是一个巨大的应用程序。它在我看来它在[]任务中失败了。
我做了更多调查, iStudyPoint 设置为 65535 (据我理解为-1)。我的bool数组限制在0-51,所以我对它断言并不感到惊讶。
我现在已经解决了在代码中使用65535的根本原因。但是,我的问题是,我使用什么类型的 try / catch 语句,以便在分配我的地图条目内容时能够发现这种问题?