这几天在写VO,需要实现一个功能,将二维坐标点按坐标放在平面上的网格里。这个功能很简单,但是为了节约一点内存,我打算将坐标点的指针放到网格里面,需要的时候用指针操作即可:
vector< vector <vector <keypoint*> > > cells;
然而在实际使用的时候却发现,有一大批的点的坐标居然被修改了。我非常确定的一点就是没有地方可以修改坐标值。这时候意识到,在提取了这些特征点之后,我将所有的点都放在了一个vector中,而当存放所有坐标点的vector删除某一元素时,后续的所有点的地址都会发生改变,故在网格中存储点的坐标很容易造成存储了一个野指针。
修改方法:
第一,将cells改为
vector< vector <vector <keypoint> > > cells;
第二,将存储所有特征的的vector改为存储坐标点的指针,然后将所有的特征点都单独new,这样可以保证不改变特征点的地址。
2019年2月1日15点26分记