我正在尝试使用 Visual Studio 2012 的代码分析功能。我刚刚在我现有的项目上运行了它们,并在包含我自己的 Knuth 减法 PRNG(又名 RAN3)的实现的部分上发现了一些缓冲区溢出警告(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。这段代码有什么问题?我错过了什么吗?