我有一个玩具密码程序,当给定一个很长的密钥时遇到总线错误(我正在使用 961168601842738797 来重现它),这让我感到困惑。当我注释掉部分以隔离错误时,我发现它是由我的 Sieve of Eratosthenes 中的这个无辜的循环引起的。
unsigned long i;
int candidatePrimes[CANDIDATE_PRIMES];
// CANDIDATE_PRIMES is a macro which sets the length of the array to
// two less than the upper bound of the sieve. (2 being the first prime
// and the lower bound.)
for (i=0;i<CANDIDATE_PRIMES;i++)
{
printf("i: %d\n", i); // does not print; bus error occurs first
//candidatePrimes[i] = PRIME;
}
有时这是分段错误而不是总线错误。
谁能帮助我了解正在发生的事情以及将来如何解决/避免它?
提前致谢!
附言
完整代码可在此处获得: