Problem mit dynamischen Arrays
-
Hallo,
ich habe ein Problem mit 2 dynamischen Arrays.
. . . long Anzahl = 1000, Bereich = 4500; long *Sortierfeld = new long[Anzahl], *Vergleich = new long[Anzahl]; . . . for(int i = 0; i <= Anzahl; i++) { Sortierfeld[i] = rand() % Bereich; } for(int i = 0; i <= Anzahl; i++) { Vergleich[i] = Sortierfeld[i]; } . . . delete [] Sortierfeld; . . . delete [] Vergleich;
Das Programm stürzt ab, wenn Vergleich freigegeben werden soll.
Hab ich hier einen Fehler in Code?
Ich hab jedenfalls nichts entdeckt.Danke schonmal im Voraus.
Christopher
-
Du Reservierst 4500 Elemente im Array schreibst aber in 4501 Element rein.
-
genau, die Array-Indices fangen bei 0 an zu zählen. Wenn du 4500 Elemente einplanst, sind diese durchnummeriert von 0 bis 4499. Du greifst aber in deinen for-Schleifen auf Element Nummber 4500 zu - das wäre das 4501. Objekt.
Mfg, smasher1985
-
ok,
zuallererst:
Destroyer666 reserviert 1000 Elemente.
Trotzdem haben meine Vorredner recht. Du schreibst in Speicherbereiche, die dir nicht "gehören".
Btw.: Was soll diese Zeilen bringen (entspr. korrigiert)?
for(int i = 0; i < Anzahl; i++) { Vergleich[i] = Sortierfeld[i]; }
Wenn du den Inhalt der Arrays kopieren willst (warum auch immer), dann musst du folgendes schreiben:
for(int i = 0; i < Anzahl; i++) { *Vergleich[i] = *Sortierfeld[i]; }
Sonst zeigt Vergleich mit seinen Zeigern auf den Speicherbereich des Arrays Sortierfeld. Da du ihn aber mit
delete [] Sortierfeld;
freigibst, wird der nachfolgende Befehl
delete [] Vergleich;
die von dir genannte Fehlermeldung ausgeben, da eben Vergleich auf Sortierfeld zeigt. Berichtigt mich, wenn ich falsch liege.
MfG BigBoomer
-
Stimmt. Danke für die schnelle Hilfe. Jetzt funktioniert alles.
Christopher