int arr[ 5 ] = { 0 };

int i = 8; // out of bounds

arr[ i ] = 8;

我知道我可以这样检查我是否if(i 5)...。

我也知道Visual Studio中的SEH,但似乎无法正常工作。
__try { /* code */ }

__except(GetExceptionCode() == EXCEPTION_ARRAY_BOUNDS_EXCEEDED)

这是行不通的。正如我所看到的,SEH在除数为0的情况下工作,访问 protected 页面...如何保护我的程序免于崩溃?

最佳答案

无法保证SEH会捕获到该错误-这取决于您的硬件检测到访问,但并非所有无效的阵列访问都会发生这种情况。如果您想确定要捕获它,请使用标准C++ std::vector容器而不是数组,并通过其at()成员函数而不是[]运算符进行访问-如果访问无效,这将引发标准C++异常。

10-07 15:09