Я пытаюсь изменить значение в массиве, используя язык программирования Си, и мне кажется, что я зашел в тупик с этой, казалось бы, простой операцией.Пожалуйста, посмотрите фрагмент кода ниже:
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)
Любая помощь будет принята с благодарностью.