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


Anmelden zum Antworten