focus on linux, c/c++, lua

记一个小bug

在游戏过程中,我会把房间内的玩家列表push到一个vector中,而且当前玩家player的信息始终放在该vector的第一个位置。
为了以后能快速的获取到自己的信息,我做了这样一个处理:
CPlayer* p = &m_vecPlayer[0];
这样的话,以后自己的信息不断的更新,我直接取到内存的内容即可。
随着玩家的不停进出房间,也就是vector不停的push和erase,在其中再次获取p的时候,发现它已经是一个野指针了,仔细分析一下,
问题很明显,因为在vector做Push操作的时候,当容量大于一定的容量时候,vector会做一次重新申请内存,以及全拷贝的过程,这样
p指向的地址肯定就是非法地址了,解决这个问题也很好办,只要能获得到该vector的地址即可,然后再去定位首个元素内容,其实和
每次去直接获取m_vecPlayer[0]的效果是一样的。我感觉利用CPlayer** p = &&m_vecPlayer[0]的做法应该是不靠谱的,因为第一个
地址的地址,并不一定是vector的地址,毕竟vector还有其他的信息,比如容量,等。有时间可以写代码验证一下。

posted on 2014-09-25 14:07 zuhd 阅读(2864) 评论(0)  编辑 收藏 引用 所属分类: c/c++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理