C++;遍历时,列表迭代器永远不会到达end() >我写了一个程序,用Visual C++编译时运行得非常好。现在我想把它移植到linux上,但是在linux上编译之后,有一件非常奇怪的事情发生了

C++;遍历时,列表迭代器永远不会到达end() >我写了一个程序,用Visual C++编译时运行得非常好。现在我想把它移植到linux上,但是在linux上编译之后,有一件非常奇怪的事情发生了,c++,linux,list,iterator,g++,C++,Linux,List,Iterator,G++,因此,我尝试使用迭代器循环遍历一个列表。代码如下: for (list<IntermediateRepresentation>::iterator irIt = funcIt->second.prologue.begin(); irIt != funcIt->second.prologue.end(); ++irIt) { irIt->address = address; address += getOpcodeSize(irIt->opcod

因此,我尝试使用迭代器循环遍历一个列表。代码如下:

for (list<IntermediateRepresentation>::iterator irIt = funcIt->second.prologue.begin(); irIt != funcIt->second.prologue.end(); ++irIt) {
    irIt->address = address;
    address += getOpcodeSize(irIt->opcode);
}
这也会导致无限循环,因为它使用类似于我的循环来计算大小。所以,这不是预期的行为,对吗

谁能告诉我问题出在哪里

哦,我正在使用Ubuntu12.10、g++版本4.7.2和EclipseIDE以及LinuxGCC作为工具链


谢谢

您可能通过将其自身拼接而创建了一个无效的

例如,第三种变体的使用:

3) 将范围
[第一,最后一个)
中的元素从
其他
移动到
*此
中。元素插入到
pos
指向的元素之前。如果
pos
是范围
[第一,最后一个)
中的迭代器,则行为未定义


这不是预期的行为。它看起来有点像内存损坏,你能观察
结束
指针并逐步遍历你的程序吗?你从哪里得到
funcIt
的?什么是
funcIt->second
类型?什么是
funcIt->second。类型的序言
吗?试试
-D\u GLIBCXX\u DEBUG
确定
funcIt
是有效的迭代器吗?在无限循环中循环迭代有效值吗?@bash.d预增量是惯用的(更正确)。@PradipnaNepal是的,很可能是这样。
size_t irSize = funcIt->second.prologue.size();
void splice(const_iterator pos, list& other, 
            const_iterator first, const_iterator last);