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)。