在游戏过程中,我会把房间内的玩家列表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还有其他的信息,比如容量,等。有时间可以写代码验证一下。