我有两个类: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
。 (至少这是我想要做的)
当我尝试打印一个框架中的所有点时,其中一些点会存储垃圾数据:例如, id = 423784237,id = -9431101 - 其余的都有有效的数据。
但是,当我直接检查它与矢量spots
,它没有指向正确的地方。 例如,ID = 37是在细胞在帧的spot_list
0x20f8288,但在0x210d080在向量spots
。
由于存在随机垃圾数据和地址不一样,我很确定我没有正确地做到这一点 - 但我不明白我应该采取什么不同的做法。我将不胜感激任何帮助。
请提供[mcve]。 – Barry
为什么你先在堆上分配,然后复制并存储它,然后删除原来的? – stijn
如果由于添加了更多元素而需要重新分配矢量,则可以使用矢量的back元素'&spots.back()'的地址,但该地址**会更改**。只要你调用'push_back',你所有到它的元素的指针就会失效*。 – Galik