Я пытаюсь изменить значение в массиве с использованием языка программирования C, и я, кажется, ударяю по пустой стене с этой, казалось бы, простой операцией. Пожалуйста, смотрите фрагмент кода ниже: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)
Любая помощь будет будем очень благодарны.
А что делает `если ((^ 2)> SIEVELIMIT nextPrimeCandidate) перерыв;` означает? – ruslik 2010-11-30 00:44:40
Я, по-видимому, пытался проверить, повысил ли `nextPrimeCandidate` до 2-го уровня больше, чем` SIEVELIMIT`, но после прочтения ответа Адама Розенфилда ниже, я должен действительно забыть о своем опыте JAVA при работе с C – 2010-11-30 16:39:48