我在尝试使用Visual Studio 2012的代码分析功能。我只是将它们运行在我现有的项目上,并在包含我自己实现的Knuth的减法PRNG(aka)的部分发现了一些缓冲区溢出警告(C6385/C6386) RAN3)。但是,我不明白为什么会发生这种情况,因为它看起来很好(我可以看到没有任何超出限制的读/写)。所以我做了一个相当短的部分(下面),但仍然得到了相同的警告,无法找出它们的原因。为什么此代码在Visual Studio 2012的代码分析中发出缓冲区溢出警告(C6385/C6386)?
int main() {
unsigned int k = 1U, seed = 12345U, randomNumbers[55];
randomNumbers[54] = seed;
for(unsigned int i = 1U; i <= 54U; ++i) {
unsigned int ii = ((21U * i) % 55U) - 1U;
randomNumbers[ii] = k;
k = seed - k;
seed = randomNumbers[ii];
}
return 0;
}
有了上面的代码,我上线7 C6386警告和在线9.什么不对的代码C6385?我错过了什么吗?
我尝试用'int's替换'unsigned int's:http://ideone.com/URAjjw但是发出相同的警告。嗯,他们是误报吗? –