使用vector需小心

 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;
压入堆数据,即可避免此类问题

=======================================================

欢迎批评指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值