Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging C++;矢量基址偏移_Debugging_Vector_Stl_Stdvector - Fatal编程技术网

Debugging C++;矢量基址偏移

Debugging C++;矢量基址偏移,debugging,vector,stl,stdvector,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 o

我最近在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);
}
std::向量序列;
...
如果(isFound)
{
断言(pos
在代码进入if块之前,数据都是正确的。但是,在ref.Update()操作之后,序列[0]的基址移动了1个字节。例如,在if块之前,&Sequence[0]=0x7fffea22eef0。在ref.Update()之后,它变为&Sequence[0]=0x7fffea22eef1。我通过gdb将数据转储到*0x7fffea22eef0,它不会改变。数据仍然正确有效,但显然我无法通过调用序列[0]直接读取/写入数据

我现在不知道如何调试这个问题


有什么建议吗?

除了向量的第一个元素的地址的低级别更改外,它是否在访问序列[0]时以任何方式给您带来错误?没有。当我尝试使用for循环遍历向量中的所有元素(直到它达到Sequence.size())时,它抛出错误消息并导致系统崩溃。原因是当基址改变时,Sequence.size()的结果也会变成一个垃圾值。ref.Update()中有一个数组,它溢出了…修改了数组中的值。您应该显示更多详细信息。