我最近遇到了C ++ / STL向量操作的奇怪问题。
以下是我的代码的样子。源代码很大,所以我只发布部分代码。
std::vector<Record> Sequence;
...
if(isFound)
{
assert(pos < Sequence.size());
Record ref = Sequence[pos];
ref.Update(); // it's a const function. it does not perform any operation on Sequence
...
Sequence.erase(Sequence.begin() + pos);
Sequence.insert(Sequence.begin(), ref);
}
在代码进入if块之前,数据都是正确的。但是在ref.Update()操作之后,Sequence [0]的基地址会移位1个字节。例如,在if块之前,&amp; Sequence [0] = 0x7fffea22eef0。在ref.Update()之后,它变为&amp; Sequence [0] = 0x7fffea22eef1。我将数据转储到* 0x7fffea22eef0由gdb,它不会改变。数据仍然正确有效,但显然我无法通过调用Sequence [0]直接读/写数据。
我现在不知道如何调试此问题。
有什么建议吗?