如何在Visual Studio 2015中捕获此异常?

时间:2016-04-01 12:57:34

标签: exception-handling mfc indexoutofboundsexception

我在我的应用程序中遇到了这个问题。点击调试按钮提供了这个细节:

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 语句,以便在分配我的地图条目内容时能够发现这种问题?

0 个答案:

没有答案