【发布时间】:2012-12-14 14:27:10
【问题描述】:
我有一个deque<rect*> rects,其中rect 是一个用户定义的类。当我尝试 insert 和 rect* 进入它时,我遇到了分段错误。 gdb 从我的调用 rects.insert(it,new rect([constructor parameters])); 将问题追溯到一个名为 __memmove_sse3() 的函数,其中 it 是 deque<rect*>::iterator。什么可能导致此错误?
编辑: 这是我的代码的 sn-p:
for(deque<rect*>::iterator it=rects.begin();it!=rects.end();++it)
{
rect r=*r1;
rect r2=*(*it);
if(!r2.there)
continue;
if(r.down>r2.up || r.up<r2.down || r.right<r2.left || r.left>r2.right)
continue;
if(r.left>r2.left)
rects.insert(it,new rect(r2.left,r2.down,r.left,r2.up,r2.color));
if(r.right<r2.right)
rects.insert(it,new rect(r.right,r2.down,r2.right,r2.up,r2.color));
if(r.up<r2.up)
rects.insert(it,new rect(max(r.left,r2.left),r.up,min(r.right,r2.right),r2.up,r2.color));
if(r.down>r2.down)
rects.insert(it,new rect(max(r.left,r2.left),r2.down,min(r.right,r2.right),r.down,r2.color));
r2.there=false;
}
【问题讨论】:
-
迭代器可能无效?
-
向我们展示实际代码。
标签: c++ segmentation-fault deque