C ++向量基地址移位

时间:2014-10-10 21:37:49

标签: debugging vector stl stdvector

我最近遇到了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]直接读/写数据。

我现在不知道如何调试此问题。

有什么建议吗?

0 个答案:

没有答案