Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;调用std::vector::clear时崩溃_C++_Crash_Stdvector - Fatal编程技术网

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

C++ c++;调用std::vector::clear时崩溃,c++,crash,stdvector,C++,Crash,Stdvector,我有一个std::vector,其中的指针与Boost的侵入式ptr非常相似。虽然存在一些差异,但该系统运行良好,因此持续数月,我怀疑它是否存在任何缺陷。该向量包含约30个接口的列表,每个元素都有一个相当复杂对象的实现。事故发生如下: v.clear() // -> CRASH 奇怪的是,如果以任何其他方式清除向量,崩溃就不会发生;例如,以下代码不会崩溃 while(v.size()) v.pop_back(); or while(v.size()) v.erase(v.begin())

我有一个
std::vector
,其中的指针与Boost的侵入式ptr非常相似。虽然存在一些差异,但该系统运行良好,因此持续数月,我怀疑它是否存在任何缺陷。该向量包含约30个接口的列表,每个元素都有一个相当复杂对象的实现。事故发生如下:

v.clear() // -> CRASH
奇怪的是,如果以任何其他方式清除向量,崩溃就不会发生;例如,以下代码不会崩溃

while(v.size()) v.pop_back();
or
while(v.size()) v.erase(v.begin());
如果使用标志“/RTCsu”和“/RTCc”编译,它也不会崩溃。 如果我调试了所有项的发布,它甚至会成功退出clear函数,但是如果在clear I do“单步执行”之后,它会再次进入clear函数,并在调用函数“iterator end()时崩溃

这是怎么发生的?由于调试器和应用程序验证器未能向我提供任何相关信息,我应该检查内存的哪个部分是否损坏?
以前有人偶然发现过这个问题吗?

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

如果没有更多代码,很难判断。我猜其中一个包含对象的析构函数崩溃了。是的,我同意米尔克的观点。我会检查你的智能指针的实现情况。我想这不符合三个法则,或者类似的规则,我同意治疗师的观点——在某种程度上,我想补充一个答案。:-)在最后两个示例中,建议“指针”的引用计数和临时对象将一个封装在“指针”中的指针保留为未删除状态,但在第一个示例中,在您的程序上下文中,某些内容可能会被删除两次。@Walter,每一个C++程序员都必须在他职业生涯中的某个点写自己的智能指针,如果复制拷贝或赋值操作符有问题,可能会导致问题。