美文网首页
vector iterators incompatible断言问

vector iterators incompatible断言问

作者: mercurygear | 来源:发表于2018-10-29 19:56 被阅读12次

    今天运行debug版的程序跑了一会就出了vector iterators incompatible这个断言,进断点一看,停在一个vectro容器的insert调用上。
    仔细看了这部分的使用代码,很正常,一时半会没找出什么问题。
    一开始怀疑使用vector之前做了erase的操作有误,但是确认了iterator已经重新赋值了,没有使用无效的迭代器,这就奇怪了。
    出问题的代码类似下面的样子:

    vectorA.insert(vectorA.end(), reply->vectorB().begin(), reply->vectorB().end());
    

    stackoverflow上看了看,有人提到这个一般是因为对两个不同容器的iterator做比较等操作导致,但是上面的代码乍看下不会有这个问题啊。
    下意识跳转到vectroB函数的定义一看,恍然大悟,原来vectorB()返回的是vector而非vector的引用,所以上面的reply->vectorB()每次调用都生成了一个vector,自然begin和end不是同个vector,从而导致断言了。
    这个问题写代码有些大意造成的,所有其他的对vector的返回基本都使用引用,就那个地方漏写了,所以潜意识里,reply->vectorB()返回的肯定是个引用,自然被这个问题的解决给扰乱了一下。

    相关文章

      网友评论

          本文标题:vector iterators incompatible断言问

          本文链接:https://www.haomeiwen.com/subject/wsjitqtx.html