指针未指向指向类的指针向量中的正确位置
Pointers don't point to the right place in a vector of pointers to a class
我有两个类:spot
和frame
。
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中。
相关文章:
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- C++指针数组到字符数组中的特定位置
- 声明指针时更改星号的位置
- 如何在单个链表中交换两个节点的位置,只修改指针
- 当原始数据是常量时,修改指针指向的位置是 UB 吗?
- 如果访问对象,则指向的对象内部的指针会更改内存位置
- 访问违规读取位置传递指针以在c中写入的DLL中起作用
- 如何在内存位置取消指针,并用值启动它
- C++ - 智能指针 - 访问冲突读取位置0xDDDDDDDD
- 最简单的方法使多个指针一次指向同一位置,一次只处理2个位置
- 在指针中保存确定的位置
- 试图读取AIFF文件意外错误与指针位置等有关
- 如何在 c++ 中查找文件指针位置
- QTableView并设置指针位置
- 字符串和指针位置
- 对齐C++指针位置的目的是什么
- 正在尝试访问指针位置中的值,并获取seg错误
- C++中的平均指针位置
- 从内存中移除指针位置的项
- 正在设置文件指针位置