int arr[ 5 ] = { 0 };
int i = 8; // out of bounds
arr[ i ] = 8;
我知道如果( i < 0 || i > 5 ) ....我可以检查 i 喜欢这个 ....
我也知道 Visual Studio 中的 SEH,但它看起来不是有效的解决方案。
__try { /* code */ }
__except(GetExceptionCode() == EXCEPTION_ARRAY_BOUNDS_EXCEEDED)
这是行不通的。正如我所见,SEH 在诸如除以 0、访问 protected 页面等情况下工作……如何保护我的程序免于崩溃?
最佳答案
不能保证 SEH 会捕捉到这一点——这取决于您的硬件检测访问,这不会发生在所有无效的数组访问中。如果您想确保捕获它,请使用标准 C++ std::vector
容器而不是数组,并通过其 at()
成员函数访问它,而不是比 []
运算符 - 如果访问无效,这将引发标准 C++ 异常。
关于c++ - 在这种情况下如何防止代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658106/