我的程序是c ++,可以在ARM / Linux程序上运行。我有一个双向迭代器(3个元素)。递减从end()开始不起作用,但是从中间元素开始。 如果从begin()开始递增,则可以访问所有元素。但是,如果我从end()递减,它并不总是有效
我写了一个非常简单的测试程序,使用相同的编译器编译,包含相同的代码,但从end()递减总是可以的。 但是,如果我将相同的代码放入项目中的模块中(该模块被多次调用),则它并不总是有效。有时返回11,而不是返回33。
我的公司将编译器从g ++ 4切换到g ++ 8时发生了问题。我怀疑这与内存对齐问题有关。
{
std::map<int,int> mymap;
mymap[11] = 100;
mymap[22] = 200;
mymap[33] = 300;
int result;
std::map<int,int>::const_iterator it = mymap.end();
--it;
printf("%d\n", (*it).first);
std::map<int,int>::reverse_iterator itr = mymap.rbegin();
printf("%d\n, (*itr).first);
for (std::map<int,int>::const_iterator itf = mymap.begin(); itf != mymap.end(); itf++)
{
result = (*itf).first;
}
printf("%d\n, result);
mymap.clear();
}
我希望输出始终为33、33、33。但是有时,输出为11、11、33。 从begin()开始总是有效,而从end()或rbegin()开始并不总是有效。