为什么C++没有捕获此异常?

ain*_*ins 0 c++ exception

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

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

在Windows 7 64bit上运行,MSVCR编译.

jua*_*nza 5

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