tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
325
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    El_Cattivo El_Cattivo ist offline Grünschnabel
    Registriert seit
    Sep 2006
    Beiträge
    3
    Hallo,
    gleich mal vorweg: Da ich gerade von c auf c++ umsteige, bin ich recht unerfahren mit vielen Dingen der OOP.
    Ich arbeite mit dem Borland Builder 6.0 unter Windows XP
    Nun zu meinem Problem:
    Ich reserviere mir mittels "new" dynamischen Speicher für 2D-Arrays, den ich am Ende der Methode mit delete [] wieder frei gebe.
    Rufe ich diese Methode (wie hier durch erneutes clicken des Buttons) ein weiteres Mal auf, steigt das Programm mit einem Speicherfehler aus.
    Hier mal die (wie ich denke) entscheidenden Quelltexte:

    void __fastcall TMainMenue::BContinueClick(TObject *Sender)
    {
    EnableDLT();
    .
    .
    .
    }

    void TMainMenue::EnableDLT(void)
    {
    //dyn speicherreservierung
    double **Array1 = new double *[4]; //Ausstiegspunkt beim 2. Durchlauf
    double **Array2 = new double *[3];

    for (int i=0; i<4 ; i++) Array1[i] = new double [StrToInt(LabScanNr->Caption)];

    for (int i=0; i<3 ; i++)
    {
    Array2[i]= new double [StrToInt(LabScanNr->Caption)];
    }
    .
    .
    .
    delete [] Array1;
    delete [] Array2;
    }
    gleiches Problem tritt auf, wenn ich eine Methode iterativ aufrufe, in der Speicher so gehandhabt wird.

    Vielen Dank für eure Hilfe

    El_Cattivo
     

  2. #2
    deepthroat deepthroat ist gerade online Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Du hast vergessen die Unter-Arrays auch wieder zu löschen. Bevor du Array1 und Array2 mit delete[] freigibst mußt du erst noch Array1[0..3] und Array2[0..2] mit delete[] löschen.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    El_Cattivo El_Cattivo ist offline Grünschnabel
    Registriert seit
    Sep 2006
    Beiträge
    3
    Wie kann ich denn die Unterarrays leeren?

    delete [1][] Array1

    Habe in meinem "schlauen" Buch nix dazu gefunden!
     

  4. #4
    deepthroat deepthroat ist gerade online Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Na genauso wie du sie auch gefüllt hast. Mit einer Schleife:
    Code cpp:
    1
    2
    3
    
    for (int i = 0; i < 4; ++i) {
      delete[] Array1[i];
    }
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    El_Cattivo El_Cattivo ist offline Grünschnabel
    Registriert seit
    Sep 2006
    Beiträge
    3
    juchhuu
    Habs hinbekommen,
    @deepthroat: Vielen Dank

    Bis zur nächsten Fragerei!
    Gruß,
    El_Cattivo
     

Ähnliche Themen

  1. [Apache 2.0.58] Speicherfehler beim stoppen
    Von Prophet05 im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 19.05.06, 23:30
  2. Speicherfehler
    Von illaX im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 04.04.06, 14:30
  3. Speicherfehler abfangen
    Von MFC openGL im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 28.04.05, 12:27
  4. Wie entstehen speicherfehler?
    Von sra im Forum Coders Talk
    Antworten: 3
    Letzter Beitrag: 29.07.04, 10:13
  5. MAX5 Speicherfehler
    Von Pringles im Forum 3D Studio Max
    Antworten: 8
    Letzter Beitrag: 07.04.04, 11:53