我正在尝试使用 C 编程语言修改数组中的值,但这个看似简单的操作似乎遇到了空白。请看下面的代码片段:
while(1) {
printf("Current prime candidate is %i\n",nextPrimeCandidate);
int innerSieve;//=2;
int currentPrimeCandidate=0;
for (innerSieve=2;innerSieve<SIEVELIMIT;innerSieve++) {
currentPrimeCandidate = nextPrimeCandidate * innerSieve;
//printf("Inner Sieve is b4 funny place %i,%i\n",innerSieve,currentPrimeCandidate);
//initArray[currentPrimeCandidate]=5;
//VERY UNIQUE LINE
myArray[currentPrimeCandidate] = 0;
//printf("Inner Sieve after funny place is %i,%i \n",innerSieve,currentPrimeCandidate);
}
nextPrimeCandidate=getNextPrimeCandidate(myArray,++nextPrimeCandidate);
if ((nextPrimeCandidate^2) > SIEVELIMIT ) break;
}
问题在于VERY UNIQUE LINE
注释突出显示的行。出于某种原因,当 innerSieve 变量达到 33 并到达该行时,它会将 innerSieve 变量的内容设置为该行的值(当前为 0),并且基本上强制循环进入无限循环(设置SIEVELIMIT
变量50)。当我使用 Eclipse 调试工具进行检查时,似乎在寄存器中发生了一些有趣的事情,但我不太确定我应该寻找什么。
如果您需要完整的代码清单,可以提供。(在代码中尚未初始化的特定变量在 innerSieve 变量达到 32 的精确点被初始化)
任何帮助将不胜感激。