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

Pointers don't point to the right place in a vector of pointers to a class

本文关键字:指针 位置 向量      更新时间:2023-10-16

我有两个类:spotframe

spot保存了某个图像处理器检测到的一个点的数据:它只有一个唯一的id (int)和x, y -坐标(都是double)。我把所有的点存储在一个叫做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地址的指针。(至少,这是我想做的)

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

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

因为有随机的垃圾数据和地址是不一样的,我很确定我没有正确地这样做-但我不明白我应该做什么不同。

spots.push_back(*S);

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

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