我在嘗試使用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但是發出相同的警告。嗯,他們是誤報嗎? –