C数组更改导致变量修改
我正在尝试使用C编程语言修改数组中的值,我似乎用这个看似简单的操作来打一个空白的墙。请参阅下面的代码段:
while(1) {
printf("Current prime candidate is %in",nextPrimeCandidate);
int innerSieve;//=2;
int currentPrimeCandidate=0;
for (innerSieve=2;innerSieve<SIEVELIMIT;innerSieve++) {
currentPrimeCandidate = nextPrimeCandidate * innerSieve;
//printf("Inner Sieve is b4 funny place %i,%in",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 Debug工具检查时,似乎寄存器中有一些有趣的东西,但我不太清楚我应该寻找什么。
如果你需要整个代码清单,可以提供这个。(在代码中初始化的特定变量在innerSieve变量命中32的精确点处初始化)
任何帮助将不胜感激。
没有找到相关结果
已邀请:
2 个回复
芭隘的盘石
大于
的最大指数,并且你正在覆盖
(在堆栈上可能跟随
)。
迪擅哨乘傅
在C中,
运算符不是幂运算符,它是按位xor运算符。你的迭代次数比想要的要多得多,这会导致数组索引越界错误,所以你要覆盖随机内存并得到奇怪的结果。 C中没有幂运算符(尽管有
函数)。由于您只是对一个数字求平,最简单的解决方法是将数字乘以它自己: