调用std :: vector :: clear时c ++崩溃

时间:2012-11-28 12:54:23

标签: c++ crash stdvector

我有一个std::vector<Pointer>,其中指针与Boost的侵入式ptr非常相似。有几个不同,但系统运作良好,几个月,我怀疑它有任何缺陷。向量包含~30个接口的列表,每个元素都有一个相当复杂的对象的实现。崩溃发生如下:

v.clear() // -> CRASH

奇怪的是,如果以任何其他方式清除向量,则不会发生崩溃;例如,以下代码不会崩溃。

while(v.size()) v.pop_back();
or
while(v.size()) v.erase(v.begin());

如果我使用标志“/ RTCsu”和“/ RTCc”进行编译,它也不会崩溃。 如果我调试所有项目的释放正确发生,它甚至会成功退出clear函数,但是如果明确地我执行“step into”之后它会再次进入clear函数并且在调用函数“iterator时会崩溃”端()“

这是怎么回事?我应该检查内存的哪一部分是否存在损坏,因为调试器和应用程序验证程序未能提供任何相关信息? 有没有人在此之前偶然发现了这个问题?

1 个答案:

答案 0 :(得分:0)

智能指针是否具有复制构造函数和赋值运算符?如果智能指针有问题,STL容器会存储包含项的副本,这可能导致您所描述的问题。