最近遇到了一个奇妙的问题,在一个抽奖活动里抽奖偶尔会出现发给客户端的数据不正确的情况,结果初步排查,发现这是由于有一个指针指向的对象里的数据发生了错乱。而且很奇妙的,经常是抽了好几十次才出现一次这种情况
先来看一段代码
const Item* OnePiece::getRandItem(Lib* pLib, const std::set<DWORD>& extraSet)
{
std::vector<Item>& itemListCfg = pLib->itemList;
std::vector<Item> itemList;
DWORD totalWeight = 0;
//初始化奖池
std::vector<Item>::const_iterator iter = itemListCfg.begin();
for (; iter != itemListCfg.end(); ++iter)
{
if (extraSet.count(iter->indexId) == 0)
{
//该奖品加入奖池
itemList.push_back(*iter);
totalWeight += iter->weight;
}
}
//抽随机数
DWORD tValue = 0;
if (totalWeight > 0) {
tValue = Tool::randBetween(0, totalWeight - 1);
}
DWORD maxTotalWeight = 0;
const Item* pItem = NULL;
iter = itemList.begin();
for (; iter != itemList.end(); ++iter)
{
maxTotalWeight +=