VS2010:在std :: vector.clear()中声明“矢量迭代器不兼容”

时间:2012-11-26 09:32:20

标签: c++ visual-studio-2010 stl assert assertion

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

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...

1 个答案:

答案 0 :(得分:3)

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

更新(2015年4月14日):

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

原始链接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中解决,如此处所述Description of Visual Studio 2010 Service Pack 1