Primzahlprogramm mit Zeigerfehler
-
hallo Leute
ich hab mir ein Primzahlprogramm zum errechen eben jener geschrieben.
Allerdings stoppt das Programm immer gegen Ende, zeigt einen Speicherfehler und läuft dann doch zu Ende und gibt den return code raus
http://s1.directupload.net/images/080410/dbzsop5b.jpg
(unter Visual C++)Wenn ich die prim.exe jedoch so starte sagt mir Windows dass das Programm ein Problem ausgelöst hat und beendet werden muss.
http://s4.directupload.net/images/080410/i4nk95es.jpgHier der Code:
int main() { int iAnzahl = 5; cout<<"Wie viele Primzahlen moechtest du haben: "; cin>> iAnzahl; cout<<endl; clock_t t1 = clock(); // zum Zeit stoppen int *primzahlen; primzahlen = new int[iAnzahl]; // in diesem Array werden die schon errechneten primzahlen gespeichert, wie die 2 primzahlen[0] = 2; int anzahl = 1; // die anzahl der schon errechneten Primzahlen, beginnend mit 1 wegen der 2 int zahl = 3; while ( anzahl <= iAnzahl ) { if ( prim(zahl, primzahlen, anzahl) ) // in der funktion prim wird nur das array durchlaufen bis zum punkt anzahl { primzahlen[anzahl] = zahl; anzahl++; //cout<<zahl<<endl; } else { } zahl += 2; } clock_t t2 = clock(); // auch zum Zeit stoppen ausgabe(primzahlen, &iAnzahl); // die primzahlen werden ausgegeben //speichern(primzahlen, &iAnzahl); delete[] primzahlen; cout<< static_cast<long>(t2-t1) <<"ms gebraucht!"<<endl; // die verbrauchte zeit wird errechent und ausgegeben system("PAUSE"); return 0; }
wodran kann das liegen
-
zeile 17, du zählst eins zu weit ...
-
stimmt danke
aber wieso macht der trotzdem weiter bzw gibt die fehlermeldung nur manchmal aus?
-
Undefiniertzes Verhalten ist nunmal... na wie soll ich sagen: Undefiniert! Du schreibst irgendwo in fremden Speicher rum und beschädigst so den Heap. Auf dem Heap befinden sich nicht nur Benutzerdaten, sondern auch Daten, die für den Heapmanager wichtig sind, wie zB Größe des Datenblocks oder Sentinels. Wenn du diese überschreibst, kriegt der Manager Probleme.
Gruß
Don06