C++ catch(…)不能捕获所有异常

C++ catch(…)不能捕获所有异常,c++,exception-handling,C++,Exception Handling,我遇到了一个关于异常的问题 代码如下所示 try { auto it = set_difference(allInterfaces.begin(), allInterfaces.end(), eths.begin(), eths.end(), newCards.begin()); } catch(...) { cout << "exception thrown << endl; } 试试看 { auto it=set_差异(allInter

我遇到了一个关于异常的问题

代码如下所示

try
{
    auto it = set_difference(allInterfaces.begin(), allInterfaces.end(), eths.begin(),   
    eths.end(), newCards.begin());
}  
catch(...)
{
  cout << "exception thrown << endl;
}
试试看
{
auto it=set_差异(allInterfaces.begin()、allInterfaces.end()、eths.begin(),
eths.end(),newCards.begin();
}  
捕获(…)
{

CUT

借助于您的注释,很可能增加并迭代从NealCudi.NoSoC.[ /Cuff> >返回的迭代器,甚至超出向量的范围。这导致(在您的情况下导致崩溃)而不是抛出的C++异常。C++中没有检查迭代器访问(很少有事情)。


要解决这个问题,您还需要在
newCards
向量的末尾传递,并确保您没有越界。

在注释的帮助下,您很可能会增加并迭代从
newCards.begin()
返回的迭代器,甚至超出向量的边界。这会导致(在您的情况下,这会导致崩溃)而不是抛出的C++异常。C++中没有检查迭代器访问(很少有事情)。


要解决这个问题,您还需要在
newCards
向量的末尾传递,并确保您没有越界。

在注释的帮助下,您很可能会增加并迭代从
newCards.begin()
返回的迭代器,甚至超出向量的边界。这会导致(在您的情况下,这会导致崩溃)而不是抛出的C++异常。C++中没有检查迭代器访问(很少有事情)。


要解决这个问题,您还需要在
newCards
向量的末尾传递,并确保您没有越界。

在注释的帮助下,您很可能会增加并迭代从
newCards.begin()
返回的迭代器,甚至超出向量的边界。这会导致(在您的情况下,这会导致崩溃)而不是抛出的C++异常。C++中没有检查迭代器访问(很少有事情)。


要解决这个问题,您还需要在
新卡
向量的末尾传递,并确保您没有越界。

设置差异
将两个输入集中唯一的元素写入您传递的输出范围。您有责任确保该范围足够大,以包含否则,您将超出范围的界限,导致未定义的行为。发生这种情况时不会引发异常,您可以期望的最佳指标是未优化的生成中的断言失败(这也无法保证)

假设
newCards
是一个支持
push_-back
的容器,防止这种情况发生的最简单方法是使用,它将在每次为其指定对象时调用
push_-back

auto it = set_difference(allInterfaces.begin(), allInterfaces.end(), 
                         eths.begin(), eths.end(), std::back_inserter(newCards));

其他可用选项有(调用
push_front()
)和(调用
insert()
)。选择一个最适合您的需要。

set\u difference
将两个输入集中唯一的元素写入您传入的输出范围。您有责任确保该范围足够大以包含结果。否则,您将超出范围的边界,导致未定义的行为。发生这种情况时不会引发异常,您可以期望的最佳指标是未优化的生成中的断言失败(这也不能保证)

假设
newCards
是一个支持
push_-back
的容器,防止这种情况发生的最简单方法是使用,它将在每次为其指定对象时调用
push_-back

auto it = set_difference(allInterfaces.begin(), allInterfaces.end(), 
                         eths.begin(), eths.end(), std::back_inserter(newCards));

其他可用选项有(调用
push_front()
)和(调用
insert()
)。选择一个最适合您的需要。

set\u difference
将两个输入集中唯一的元素写入您传入的输出范围。您有责任确保该范围足够大以包含结果。否则,您将超出范围的边界,导致未定义的行为。发生这种情况时不会引发异常,您可以期望的最佳指标是未优化的生成中的断言失败(这也不能保证)

假设
newCards
是一个支持
push_-back
的容器,防止这种情况发生的最简单方法是使用,它将在每次为其指定对象时调用
push_-back

auto it = set_difference(allInterfaces.begin(), allInterfaces.end(), 
                         eths.begin(), eths.end(), std::back_inserter(newCards));

其他可用选项有(调用
push_front()
)和(调用
insert()
)。选择一个最适合您的需要。

set\u difference
将两个输入集中唯一的元素写入您传入的输出范围。您有责任确保该范围足够大以包含结果。否则,您将超出范围的边界,导致未定义的行为。发生这种情况时不会引发异常,您可以期望的最佳指标是未优化的生成中的断言失败(这也不能保证)

假设
newCards
是一个支持
push_-back
的容器,防止这种情况发生的最简单方法是使用,它将在每次为其指定对象时调用
push_-back

auto it = set_difference(allInterfaces.begin(), allInterfaces.end(), 
                         eths.begin(), eths.end(), std::back_inserter(newCards));

其他可用选项有(调用
push_front()
)和(调用
insert()
)。选择最适合您需要的选项。

您认为
set_difference
会引发什么异常?请记住,有些东西称为异常,但它们是系统(或处理器)的例外,而不是C++异常。<代码> catch <代码>块只捕获来自<代码>抛出< /C>的C++异常,而不是任何其他类型的异常(例如,空指针访问可能LEA)。