gpt4 book ai didi

C++ 列表迭代器在遍历时永远不会到达 end()

转载 作者:IT王子 更新时间:2023-10-29 01:22:29 28 4
gpt4 key购买 nike

好的,我写了一个程序,用 Visual C++ 编译器编译时运行良好。现在我想将它移植到 linux,但是在 linux 中编译它之后发生了一些奇怪的事情。

因此,我尝试使用迭代器遍历列表。这里的代码:

for (list<IntermediateRepresentation>::iterator irIt = funcIt->second.prologue.begin(); irIt != funcIt->second.prologue.end(); ++irIt) {
irIt->address = address;
address += getOpcodeSize(irIt->opcode);
}

现在的问题是上面的代码导致死循环。我试图在调试器中查看它为什么这样做,我发现列表的最后一个元素(就在'end()'之前)指向'begin()'迭代器而不是'end( )' 迭代器,所以当我调用 '++irIt' 时,它返回到 'begin()'。这是预期的行为吗?我发现的另一件事是,当我这样做时:

size_t irSize = funcIt->second.prologue.size();

这也会导致无限循环,因为它使用类似于我的循环来计算大小。那么,这不是预期的行为吗?

谁能给我一些提示,说明问题出在哪里?

哦,我正在使用 Ubuntu 12.10、g++ 版本 4.7.2 和以 Linux GCC 作为工具链的 eclipse IDE。

谢谢!

最佳答案

您可能创建了一个无效的 std::list通过拼接到自身。

例如,splice 的第三个变体的用法:

void splice(const_iterator pos, list& other, 
const_iterator first, const_iterator last);

3) Moves the elements in the range [first, last) from other into *this. The elements are inserted before the element pointed to by pos. The behavior is undefined if pos is an iterator in the range [first,last).

关于C++ 列表迭代器在遍历时永远不会到达 end(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15019487/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com