变量在某些条件下没有初始化
【问题描述】在设备增加对象到最大值时 , 系统出现段错误
【问题定位】代码如下:
VOS_UINT32 ulSlotIndex ;
.......
if (MAX_STACK_CAP > m_ulThirdKeyMax)
{
pstSlotStru = (SLOT_STRU *)(m_pucSlotStru + ulSlotIndex * m_ulSlotStruSize);
if (VOS_NULL_PTR != pstSlotStru->apObj[ulThirdKey])
{
return ERROR_PARC_TABLE_OBJ_ALREADY_EXIST;
}
pstSlotStru->apObj[ulThirdKey] = pObj;
++m_ulObjNum;
++pstSlotStru->ulObjNum;
}
else if (0 == ulThirdKey) // 如果不是索引 , 同时第三级关键字为 0, 那么不用分配槽表项
{
ulSlotIndex = m_astSubrack[ulSubrackNo].aulSlotIndex[ulSlotNo];
.......
}
pstSlotStru->apObj[ulSlotIndex] = 0;
见红色部分代码 , 我们可以发现在第一个 if 中 , ulSlotIndex 没有被赋值 , 还是维持初始值 VOS_NULL_LONG 。最后用这个去访问数据 , 结果出现踩内存
第 3 页 / 共 24 页