我正在尝试使用Visual Studio 2012的代码分析功能。我只是运行了现有项目上的分析,并发现了一些缓冲区溢出警告(C6385/C6386),这些警告出现在包含我自己实现的Knuth减法PRNG(又名RAN3)的部分中。然而,我不明白为什么会出现这种情况,因为看起来很好(我没有看到越界读取/写入)。所以我制作了一个等效的简短版本(如下),但仍然收到相同的警告,无法找出原因。
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
替换unsigned int
:http://ideone.com/URAjjw 然而,相同的警告被发出。嗯,它们是误报吗? - k2_8191