C 循环控制正在抛出未定义的行为

C 循环控制正在抛出未定义的行为,c,C,我已经将我的GCC编译器从4.1.2升级到了4.8.3,当我用4.8.3版本编译我的源代码时,我将面临以下问题 错误: 迭代8u调用未定义的行为[-Werror=积极的循环优化] { uint index; for ( index =0 ; index<BLOCK_SIZE; index++) ltoP->kdlllp= riv64[7-index]; } { uint指数; 对于(索引=0;索引xkdlllp=riv64[7-index]; } 有谁能帮我解决这个问题吗?当

我已经将我的GCC编译器从4.1.2升级到了4.8.3,当我用4.8.3版本编译我的源代码时,我将面临以下问题

错误: 迭代8u调用未定义的行为[-Werror=积极的循环优化]

{
uint index;
for ( index =0 ; index<BLOCK_SIZE; index++) 
ltoP->kdlllp= riv64[7-index]; 
}
{
uint指数;
对于(索引=0;索引xkdlllp=riv64[7-index];
}

有谁能帮我解决这个问题吗?

索引为8;
riv64[7-index]
riv64[-1u]
,未定义。消息中的
8u
表明
索引的类型为
无符号int
,在这种情况下
7-index
将计算为超出数组边界的非常大的值。(
7-8u
将被评估为
7u-8u
,这相当于
-1u
。无符号算术换行,因此产生一个非常大的值,
UINT\u MAX

请修复您的帖子格式。在代码块中添加4个空格的前缀行。完成。请检查!查看此相关内容,尽管在本例中,cout会模糊警告,而gcc会将其转换为无限循环,而在它是有限的之前。@ShafikYaghmour…当然。我会检查。谢谢!Eric,谢谢您的回复。我需要在这里做些什么来解决这个问题修复这个问题?@NaveenKumar:从你展示的代码中,我们可以看到
riv64[7-index]
是错误的。如果没有看到更多的代码,我们就看不出为什么要使用它,或者修复应该是什么。嗨,Eric,正如你上面提到的,riv64是一个带有索引8的数组,snippet。void hdcp22updateconfigpseudorandormumberriv(hdcp22PT hdcpP,guchar riv64[8] ,hdcp22T endianess)/*!endpublic*/{if(endianess==P22_BIG_ENDIAN)memcpy(hdcpP->hdcp22ConfigP->pseudoRandomNumberRiv,riv64,8);else{guint index;for(index=0;indexhdcp22ConfigP->pseudoRandomNumberRiv[index]=riv64[7-index];}@纳文库马尔:该代码似乎正在反转
riv64
,以调整endianness。如果是这样,循环索引应该受到
riv64
大小的限制,而不是
AES\u BLOCK\u size
。但这仍然是太小的代码部分,无法很好地判断,并且程序不应该通过堆栈溢出注释进行调试。我将检查k并确认。