std::vector.insert上的Seg故障
Seg fault on std::vector.insert
在自定义类型的向量(基本上是图节点)上调用插入函数时,我遇到了一个奇怪的错误。以下是生成seg故障的代码:
69 for (int i = 0; i < size; i++) {
70 PDTNode * node = arguments[i]->getNode();
71 //addChild(node);
72 children.insert(it, node); // children is vector <PDTNode*>
73 it++;
74 node->addParent(this);
75 }
我仔细检查了所有输入,结果一切正常,不为NULL。下面是我为seg错误得到的gdb堆栈跟踪:
#0 0x00007ffff4793202 in ?? () from /lib/libc.so.6
#1 0x00007ffff479163a in memmove () from /lib/libc.so.6
#2 0x00000000004289f1 in std::__copy_move<false, true, std::random_access_iterator_tag>::__copy_m<PDTNode*> (__first=0x100bd60, __last=0x10053c8,
__result=0x1001840) at /usr/include/c++/4.4/bits/stl_algobase.h:378
#3 0x00000000004289ab in std::__copy_move_a<false, PDTNode**, PDTNode**> (__first=0x100bd60, __last=0x10053c8, __result=0x1001840)
at /usr/include/c++/4.4/bits/stl_algobase.h:397
#4 0x0000000000428973 in std::__copy_move_a2<false, PDTNode**, PDTNode**> (__first=0x100bd60, __last=0x10053c8, __result=0x1001840)
at /usr/include/c++/4.4/bits/stl_algobase.h:436
#5 0x000000000042891d in std::copy<PDTNode**, PDTNode**> (__first=0x100bd60, __last=0x10053c8, __result=0x1001840)
at /usr/include/c++/4.4/bits/stl_algobase.h:468
#6 0x00000000004288dc in std::__uninitialized_copy<true>::uninitialized_copy<PDTNode**, PDTNode**> (__first=0x100bd60, __last=0x10053c8, __result=0x1001840)
at /usr/include/c++/4.4/bits/stl_uninitialized.h:93
#7 0x0000000000428847 in std::uninitialized_copy<PDTNode**, PDTNode**> (__first=0x100bd60, __last=0x10053c8, __result=0x1001840)
at /usr/include/c++/4.4/bits/stl_uninitialized.h:117
#8 0x00000000004287b8 in std::__uninitialized_copy_a<PDTNode**, PDTNode**, PDTNode*> (__first=0x100bd60, __last=0x10053c8, __result=0x1001840)
at /usr/include/c++/4.4/bits/stl_uninitialized.h:257
#9 0x0000000000428684 in std::__uninitialized_move_a<PDTNode**, PDTNode**, std::allocator<PDTNode*> > (__first=0x100bd60, __last=0x10053c8,
__result=0x1001840, __alloc=...) at /usr/include/c++/4.4/bits/stl_uninitialized.h:267
#10 0x000000000042812e in std::vector<PDTNode*, std::allocator<PDTNode*> >::_M_insert_aux (this=0x1002810, __position=..., __x=@0x7fffffffd538)
at /usr/include/c++/4.4/bits/vector.tcc:338
#11 0x000000000043c46d in std::vector<PDTNode*, std::allocator<PDTNode*> >::insert (this=0x1002810, __position=..., __x=@0x7fffffffd538)
at /usr/include/c++/4.4/bits/vector.tcc:126
#12 0x00000000004d3ea9 in PDTFunctionDec::setArguments (this=0x10027e0, arguments=...) at PDTFunction.cpp:72
非常感谢您的帮助。
感谢
我猜它是一个迭代器,但通过插入元素,可以触发容器中元素的重新定位,从而使迭代器无效。这应该是分割错误的原因。
插入向量会使迭代器无效:
children.insert(it, node); // this can invalidate `it', triggering a
// segfault during the next iteration
相关文章:
- C++函数过载会导致 SEG 故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- C ;使用lambdas在类中有条件地扩展功能(MWE的SEG故障)
- lambda回调中Android Cocos2D-X应用程序上的SEG故障
- 访问索引指向向量元素时的seg故障 - 做错了什么
- 如何修复strlen seg故障
- 将内存分配给指针数组时SEG故障
- MPI Hello World上的Valgrind SEG故障
- 迭代器越来越多,并导致SEG故障
- 复制CORBA ::任何包含字符串的corba程序SEG故障
- 当有1个以上的对象时,动态字符串类断裂与SEG故障
- C AVX2:访问数组数组中的地址时SEG故障
- SEG故障取决于指针分配的顺序
- 为什么C 线引起SEG故障
- std::map 的比较器函数中的 SEG 故障/未定义行为
- C/C++ 字符串错误与 ARM SEG 故障总线错误
- Taglib设置专辑图片,但给出了SEG故障
- 低内存会导致本机代码中的SEG故障
- STD上的SEG故障::设置整数插入
- SEG故障仅发生每次跑步