c++ - 为什么 C++ 不捕获这个异常?

标签 c++ exception

我有以下用于从缓冲区数组中提取字符串的代码。 它工作正常。但是,length 变量是在运行时确定的,因此如果它超出范围,就会发生异常。当然,可以轻松调整代码以检查 length 变量(相对于 offset 变量)是否落在边界内。虽然我很好奇为什么以下代码不起作用,因为异常似乎通过 try-catch 语句飞过(并被调试器捕获)。

try
{
    string value(&buffer[offset], length);
    // ...
}
catch (exception& e)
{
    // ...
}
catch (...)
{
    // ...
}

在 Windows 7 64 位上运行,MSVCR 编译。

最佳答案

越界访问 buffer 数组是未定义的行为。在这种情况下不需要抛出 C++ 异常。尝试在 try block 外实例化字符串,您将确定是否抛出异常。

关于c++ - 为什么 C++ 不捕获这个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830702/

相关文章:

java - 在 Java 中如何以及在哪里定义自己的异常层次结构?

java - catch block 后如何询问用户输入

javascript - Prototype 1.7.1 和 native 数组使用的错误

java - 为什么我没有得到任何输出?并且有一个InputMismatchException

Scala 2.9 无法在 Ubuntu 12.04 上运行 HelloWorld

c++ - 将派生类作为虚拟基类传递而不丢失更改

c++ - #define NULL 空

c++ - 没有匹配函数调用用于 const char* 的模板特化

c++ - constexpr 和带有重新解释转换的静态 const void 指针的初始化,哪个编译器是正确的?

c++ - 即使数据会更快可用,是否预计 poll() 需要 40 毫秒才能返回?