我有以下用于从缓冲区数组中提取字符串的代码。 它工作正常。但是,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/