【发布时间】:2013-03-11 19:53:40
【问题描述】:
假设我们有这段代码:
set<int> s;
set<int>::iterator it = s.find(val);
s.erase(it);
正如cplusplus.com所说,如果set<int> s中不存在int val,那么s.find(val)将返回set::end。
现在我的问题是,如果我们将set::end 传递给set::erase(),会发生什么?
是否可以接收segmentation fault 或aborted 等信号并得到运行时错误?或者这个特殊情况是在set处理的?
【问题讨论】:
-
我相信它是未定义的,你不知道会发生什么,即使在同一程序运行期间它也可以做不同的事情。
-
为什么不让您的代码更简单,只使用:
s.erase(val);(即使val不存在,它也会给出定义的行为)? -
“如果指定了无效的位置或范围,则会导致未定义的行为。” Last line。
-
谢谢! (我问这个问题是因为我在比赛中做过这种愚蠢的方法,我没有时间测试它。现在我只记得不要使用这种方法,因为它的行为是未定义的)
标签: c++ stl segmentation-fault set