std :: list.splice()导致程序崩溃

时间:2012-02-14 16:04:29

标签: c++ stl

我看了几个例子,据我所知,我正确地使用了拼接方法。但是,当我在Visual C ++下以调试模式运行程序时,调用堆栈显示我对splice的调用最终到达崩溃的这一行:

_Mynextiter = _Parent_proxy->_Myfirstiter;

代码:

    for(std::list<Rect>::iterator i = rects.begin(); i != rects.end();)
    {
        if(i->isOverlapping(newRect))
        {
            Rect oldRect = (*i);
            i = rects.erase(i);
            std::list<Rect> & lr = oldRect.split(newRect);
            //doesn't work either
            //rects.splice(rects.begin(), lr, lr.begin(), lr.end());
            rects.splice(rects.begin(), lr);
        }
        else i++;
    }

1 个答案:

答案 0 :(得分:1)

如果我参考互联网上的任何手册页,您似乎正在使用std::list<T>::splice()

相反,我真的不喜欢这行中的参考:

std::list<Rect> & lr = oldRect.split(newRect); 

我不知道正在做什么Rect::split()但您应该尝试复制其结果。这有帮助吗?