Ich versuche, einen Wert in einem Array mit der Programmiersprache C zu ändern, und ich scheine mit dieser scheinbar einfachen Operation eine leere Wand zu treffen. Bitte beachten Sie Codeausschnitt unten:C Array-Änderung verursacht Variablenänderung
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;
}
Das Problem ist mit der Linie markiert mit dem VERY UNIQUE LINE
Kommentar. Wenn die innerSieve-Variable 33 erreicht und an diese Zeile gelangt, setzt sie aus irgendeinem Grund den Inhalt der innerSieve-Variablen auf den Wert dieser Zeile (der aktuell 0 ist) und zwingt die Schleife im Grunde in eine Endlosschleife (die SIEVELIMIT
-Variable ist) eingestellt auf 50). Es scheint, dass einige lustige Dinge in den Registern ablaufen, wenn ich mit der Eclipse-Debug-Funktion überprüfte, aber ich bin mir nicht sicher, wonach ich suchen sollte.
Wenn Sie den gesamten Code-Eintrag benötigen, können diese zur Verfügung gestellt werden. (Mit einer bestimmten Variablen, die in dem Code initialisiert noch nicht an dem genauen Punkt initialisiert wird, dass die innerSieve Variable trifft 32)
Jede Hilfe wird sehr geschätzt werden.
Und was bedeutet 'if ((nextPrimeCandidate^2)> SIEVELIMIT) break;' bedeutet? – ruslik
Ich habe anscheinend versucht zu überprüfen, ob 'nextPrimeCandidate' auf die Potenz von 2 erhöht war größer als' SIEVELIMIT' aber nach dem Lesen Adam Rosenfields Antwort unten, ich sollte wirklich vergessen meine JAVA Erfahrung im Umgang mit C –