指针不指向指向类的指针向量中的正确位置

时间:2016-10-09 18:46:11

标签: c++ class pointers vector new-operator

我有两个课程:spotframe

spot保存有关某个图像处理器检测到的点的数据:它只有id(int)是唯一的,xy - 坐标(双倍)。我将所有点存储在我称为spots的矢量中。

除其他外,

frame包含指向属于它的所有点的指针向量:

class frame
{
    int num ;
    vector <spot *> spots_list ;
    // other members and functions
}

我从文件中读取数据:

while (//goes through a lot of rows)
    {
        spot* S = new spot (ID, X, Y) ;
        spots.push_back (*S)  ;
        frames[i].spot_list.push_back (&spots.back()) ;
        delete S ;
    }

基本上,我正在创建一个新实例S,然后我将其数据添加到向量spots,并添加一个指向其地址的指针来构建spot_list {{ 1}}。 (至少,这是我想要做的)

当我尝试打印一帧中的所有点时,其中一些点会保存垃圾数据:例如id = 423784237,id = -9431101 - 其余的都有有效数据。

但是,当我直接检查向量spots时,它没有指向正确的位置。 例如, id = 37 位于框架spot_list中的单元格 0x20f8288 中,但位于向量中的 0x210d080 spots

由于随机垃圾数据和地址不一样,我很确定我没有正确地做到这一点 - 但我不明白我应该做些什么不同。我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

spots.push_back(*S);

此调用有时需要重新分配spots内的存储空间;当发生这种情况时,任何先前存储的地址都将变为无效,因此spots_list中的条目将变为虚假。

如果您知道向量的大小,则可以使用spots预先分配spots.reserve(size)的内部;否则,您可以将索引存储到向量而不是指针。