我有两个课程:spot
和frame
。
spot
保存有关某个图像处理器检测到的点的数据:它只有id
(int)是唯一的,x
,y
- 坐标(双倍)。我将所有点存储在我称为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
。
由于随机垃圾数据和地址不一样,我很确定我没有正确地做到这一点 - 但我不明白我应该做些什么不同。我将不胜感激任何帮助。
答案 0 :(得分:0)
spots.push_back(*S);
此调用有时需要重新分配spots
内的存储空间;当发生这种情况时,任何先前存储的地址都将变为无效,因此spots_list
中的条目将变为虚假。
如果您知道向量的大小,则可以使用spots
预先分配spots.reserve(size)
的内部;否则,您可以将索引存储到向量而不是指针。