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++异常。