对不起,如果这听起来像“它编译,所以它必须工作!” 问题,但我想了解为什么会发生某些事情(或没有发生,视情况而定)。
在项目设置中,我设置Basic Runtime Checks
为Both
. 调试器告诉我:
运行时检查失败 #2 - 变量“beg”周围的堆栈已损坏。
但是如果我将它设置为默认值,即无,程序运行并正常完成,不会抛出异常并且不会导致错误。
我的问题是,我可以放心地忽略这一点(因为 MSVC++ 可能有某种错误)还是这是一个真正的问题?当堆栈被搞砸时,我看不到程序如何成功继续。
编辑:
导致此错误的函数如下所示:
int fun(list<int>::iterator&, const list<int>::iterator&);
int foo(list<int>& l) {
list<int>::iterator beg = l.begin();
list<int>::iterator end = l.end();
return fun(beg, end);
}
fun
递增和操作beg
,当它返回时,beg == end
,当 MSVC++ 中断时,它指向关闭的}
.
编辑2:
我已经隔离了这个问题。在某些情况下,从谁拥有它迭代的项目fun
中删除一些元素。list
这就是导致错误的原因。