c++ - 在这种情况下如何防止代码崩溃

标签 c++ windows visual-studio-2008 exception

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/

相关文章:

c++ - 什么是线程间操作

android - Libcurl Certificate Pinning 在 iPhone 上工作但在 Android 上不工作

python - 使用python将Linux文件中的信息解析到Windows

windows - iExpress 与 Windows 7、32 位不兼容?

c# - 在 Windows 窗体中动态设置日期时间选择器的格式

c++ - 显示是/否消息框,其中“否”呈灰色 win32api C++

java - System.out、stdout 和 cout 是一回事吗?

windows - 我如何从正在运行的 Gvim 重新加载 quickfix 窗口?

c++ - Visual Studio /子系统 :POSIX not appearing in 2008

c++ - 如何测试断言?