對不起,如果這聽起來像一個「它編譯,所以它必須工作!」問題,但我想了解爲什麼會發生某些事情(或者根本不會發生)。MSVC++說圍繞一個變量的堆棧被損壞,但程序工作
在項目設置中,我將Basic Runtime Checks
設置爲Both
。調試器通知我:
運行時檢查失敗#2 - 變量'beg'周圍的堆棧已損壞。
但是,如果我將它設置爲默認值,即none,程序將運行並正常完成,不會引發異常並且不會導致錯誤。
我的問題是,我可以放心地忽略這個(因爲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
中刪除擁有所迭代項目的一些元素。這是導致錯誤的原因。
@SethCarnegie讓我們[在聊天中繼續討論](http://chat.stackoverflow.com/rooms/1994/discussion-between-merlyn-morgan-graham-and-seth-carnegie) –