0

我正在遍历几个双端队列,将数据组合到一个新容器中,然后再使用这些数据。问题是对我的迭代器值的任何引用都会在代码执行期间的某个时刻导致分段错误。从我能找到的所有内容来看,这应该是有效的,因为我认为我不会以任何方式使迭代器无效。

vector<char> fileData;
deque<deque <char> >::iterator channel;
deque<char>::iterator channelData;

for(channel=instance.mdata.begin(); channel!=instance.mdata.end(); ++channel)
{
    for(channelData=deque<char>(*channel).begin(); channelData!=deque<char>(*channel).end(); ++channelData)
    {
        fileData.push_back(*channelData);
    }
}
4

1 回答 1

0

你在这里复制构造双端队列:

channelData=deque<char>(*channel).begin()

然后,您使用 begin() 迭代器,并且双端队列被销毁(使迭代器无效)。

再次在这里:

    channelData!=deque<char>(*channel).end()

所以现在,您正在比较两个不仅已失效的迭代器,而且您正在比较来自两个不同对象的迭代器,您也不能这样做。一旦迭代器失效,唯一合法的操作就是赋值。

您必须按如下方式编写代码:

for(channel=instance.mdata.begin();channel!=instance.mdata.end();++channel)
{
    for( channelData=channel->begin();channelData!= channel->end();++channelData)
    {
        fileData.push_back(*channelData);
    }
}
于 2013-09-28T23:28:32.643 回答