VS2010: assert "vector iterators incompatible" in std::vector.clear()

VS2010: assert "vector iterators incompatible" in std::vector.clear()

本文关键字:vector clear std iterators assert VS2010 incompatible in      更新时间:2023-10-16

我正在使用以下愚蠢的代码:

std::vector<wxString> m_redoSteps;
...
m_redoSteps.clear();
当我使用 Visual Studio

6 或 GCC 编译时 m_redoSteps.clear() 工作正常,当我使用 Visual Studio 2010 时,有一个断言"矢量迭代器不兼容"(这导致发布版本中崩溃)。

任何想法这里有什么问题?

--

编辑:再添加一行代码:

std::vector<wxString> m_redoSteps;
...
if (!m_redoSteps.empty())
{
   // do something in case it is not empty - which isn't in my case
   ...
}
m_redoSteps.clear(); // first call leads to the assertion...

安装 Visual Studio 2010 sp1,请参阅此错误报告: http://connect.microsoft.com/VisualStudio/feedback/details/545013

更新(2015 年 4 月 14 日):

错误描述545013:"vector::erase"约束在调试版本中返回不兼容的迭代器。

原始链接 http://connect.microsoft.com/VisualStudio/feedback/details/545013 不可用,但是原始错误的缓存在这里 http://web.archive.org/web/20140727031651/http://connect.microsoft.com/VisualStudio/feedback/details/545013

该错误已在 Visual Studio SP 1 中解决,如此处所述 Visual Studio 2010 Service Pack 1 的描述