は、このコードをチェックしてください:std :: list :: clearはstd :: list :: endイテレータを無効にしますか?
#include "stdafx.h"
#include <list>
int _tmain(int argc, _TCHAR* argv[])
{
std::list<int> mylist;
mylist.push_back(1);
std::list<int>::iterator i = mylist.end();
if(i == mylist.end())
printf("end is end\n");
mylist.clear();
if(i == mylist.end())
printf("never get here because Microsoft seems to "
"think the iterator is no longer safe.\n");
return 0;
}
さて、cplusplus.comによると、これは問題になることはありませんし、リリースモードでは、私は、これは結構ですと、本当にすべての問題が発生しないと思いますが、デバッグのように不可能になりますこれは私を続行させずにうわべだけ。すべてのポインタ?
興味深い。私は '.end'も無効になったと思っていましたが、その記事は反対です。興味深いことに、http://ideone.com/Y338N8が期待どおりに実行されます。 +1 –
私はWindowsに移植しようとしているコードがMacOSとLinuxを対象に書かれていたので、完璧な意味があります。どちらもGCCを実行しています。私はこれが図書館のバグだと思う。 –