typedef struct tag_ShotInfo
{
char dir[1024];
bool bName;
char name[64];
bool bChan;
}ShotInfo;
typedef vector<ShotInfo> ShotInfo_Vector;
CTreeCtrl m_treeCtrl; // 树控件
ShotInfo_Vector m_Vector; // 这里假设已经存在一些数据
ShotInfo* pInfo = NULL;
ShotInfo_Vector::iterator pi;
for (pi = m_Vector.begin(); pi != m_Vector.end(); pi++)
{
pInfo = (ShotInfo*)pi;
m_TreeCtrl.SetItemData(hItem, (DWORD)pInfo); // 为树项绑定指针地址
}
到目前为止,程序没有任何问题
但是这时我如果往m_Vector里再增加一个数据
问题就出现了
pInfo = (ShotInfo*)m_TreeCtrl.GetItemData(hItem);
取到的指针对应不到实际数据
======================================================
vector对压入的栈数据会进行管理,当压入项发生变化时,其他
已存在的项指针也可能发生变化,使用在使用迭代器指针时需要小心
======================================================
针对上述问题
建议typedef vector<ShotInfo*> ShotInfo_Vector;
压入堆数据,即可避免此类问题
=======================================================
欢迎批评指正
使用vector需小心
最新推荐文章于 2023-02-28 20:33:05 发布