我已经看到有关数组下标的帖子高于数组边界错误的帖子,我知道当迭代器等于数组的最大大小但是我的情况不同时会发生这种情况:
static inline void setUninitialized(uint32 * xoBuff, uint32 xiItemSize)
{
uint32 i;
for (i=0 ; i < (xiItemSize/sizeof(uint32)) ; i++)
{
*(xoBuff++) = (uint32)MAP_UNINITIALIZED_VALUE;
}
}
当我运行此代码时,我得到数组下标高于数组边界错误但我无法弄清楚为什么,我已经真正尝试了所有增加迭代器和投射各种变量的可行组合。 uint32的定义是:
typedef unsigned long uint32;
为什么会这种情况持续发生?
编辑: 调用函数的方式如下:
TableEntry sEntry;
setUninitialized((uint32 *)&sEntry.policyKey, sizeof(PolicyKey));
policyKey字段是实例PolicyKey
答案 0 :(得分:2)
该行
sizeof(PolicyKey)
没有给你数组的大小。你无法在C中获得数组的大小。相反,它会给你指针PolicyKey
的大小(假设它是什么),这将永远是大小相同(可能是8)。因此,(xiItemSize/sizeof(uint32))
将始终(再次假设您计算机上的所有内容都是正常大小)评估为2。
在不知道sEntry
看起来是什么的情况下很难说出其他任何内容,但我的猜测是你传入一个缓冲区,该缓冲区在某个时刻只有一个项目,并且它尝试取消引用*(xoBuff++)
时的段错误。