CStringArray *A = new CStringArray mit delete oder delete[] freigeben?



  • Nabend,

    Ich habe eine Frage zur dynamischen Speicherreservierung von CStringArrays.
    Und zwar hab ich gelesen, dass Object-Arrays mittels delete[] gelöscht werden müssen. Auf der anderen Seite habe ich auch gelesen das mit new erzeugte Arrays mit delete gelöscht werden und mit new[] erzeugte mit delete[]. Ich kann mich nun nicht so richtig entscheiden was ich benutzen soll, da keine Lust auf Speicherleks habe. Zudem möchte ich noch gerne wissen ob ich VOR dem deleten noch CStringArray::RemoveAll() aufrufen muss? Zum besseren Verständnis hier mein Code:

    CStringArray *IArray = new CStringArray, *EArray = new CStringArray, *LArray = new CStringArray;
    CStdioFile IFile, EFile, LFile;
    CString Zeile;
    int x = 0, DateiCount = 0;
    
    //Die Dateien wurden vorher in einer anderen Funktion aus einem CFileDialog geholt
    
    DateiCount = DateiListe.GetCount() / 3;  
    
    for( x = 0; x < DateiCount; x++ )
    {
        IArray->RemoveAll(), EArray->RemoveAll(), LArray->RemoveAll();
    
        //Das Öffnen der Dateien lass ich mal weg
    
        while( IFile.ReadString( Zeile ) )
            IArray->Add( Zeile );
    
        while( EFile.ReadString( Zeile ) )
            EArray->Add( Zeile );
    
        while( EFile.ReadString( Zeile ) )
            EArray->Add( Zeile );
    
        //Hier mache ich was mit den Daten
    
        IFile.Close(), EFile.Close(), LFile.Close();
    }
    
    IArray->RemoveAll(), EArray->RemoveAll(), LArray->RemoveAll();  //Ist das hier notwendig?
    
    //Muss ich alle extra ausflösen, also immer eine neue Zeile beginnen? Hatte das nämlich gedebuggt und da wurde nur der 1. Array aufgelöst.
    
    delete IArray;  
    delete EArray;  //Geht hier delete oder muss hier delete[] hin?
    delete LArray;
    

    Da fällt mir noch ein, muss jedes mal wenn die Schleife neu durchlaufen wird der Array deletet werden?

    Ok viele Fragen, hoffe ich bekomm viele Antworten. Ich danke schonmal.

    MfG

    Nocadas



  • Du erstellst ein einzelnes Objekt. Dass das Objekt zufällig vom Typ BlaArray ist, ändert daran nichts. Du gibst es also mit delete frei. RemoveAll musst du nicht aufrufen, dass macht der Destruktor von CStringArray für dich.



  • Danke für deine Antwort, der Beitrag oben war noch net ganz fertig, bin ausfersehen auf Alt+S statt Alt+Y gekommen^^.
    Ok das heißt RemoveAll() nur beim Anfang der Schleife ausführen nicht beim deleten und delete schreiben statt delete[]. Das hilft schonmal, danke dir. Fehlen nur noch die anderen paar Fragen, die erst nacher dazugekommen sind.^^



  • Nocadas schrieb:

    IArray->RemoveAll(), EArray->RemoveAll(), LArray->RemoveAll();  //Ist das hier notwendig?
    

    Nein.

    Nocadas schrieb:

    //Muss ich alle extra ausflösen, also immer eine neue Zeile beginnen? Hatte das nämlich gedebuggt und da wurde nur der 1. Array aufgelöst.
    

    Verstehe ich nicht, aber so:

    Nocadas schrieb:

    delete IArray;  
    delete EArray;  //Geht hier delete oder muss hier delete[] hin?
    delete LArray;
    

    ist es richtig.

    Nocadas schrieb:

    Da fällt mir noch ein, muss jedes mal wenn die Schleife neu durchlaufen wird der Array deletet werden?

    Nein, natürlich nicht!



  • Nocadas schrieb:

    Fehlen nur noch die anderen paar Fragen, die erst nacher dazugekommen sind.^^

    Sollten jetzt alle beantwortet sein, oder habe ich eine übersehen?



  • Hehe die Antworten gehen ja hier im Minuten takt, aber schön das es so schnell geht^^. Also mit:

    delete IArray;
    delete EArray;
    delete LArray;
    

    ob auch:

    delete IArray, EArray, LArray;
    

    geht, weil beim debuggen wurde NUR IArray aufgelöst.

    Für das Andere bedank ich mich schonmal^^. Hat sehr geholfen, habs bis jetzt fast richtig geproggt und somit keine Leks verursacht^^.
    *EDIT*, ne sind alle geklärt danke dir^^. Nur noch das oben^^.



  • Nocadas schrieb:

    ob auch:

    delete IArray, EArray, LArray;
    

    geht

    Nein.



  • Oki doki, dann hab ich nun alles... danke danke. Nur noch eins, ich wollte was zum Thema: Datei auslesen und mit Daten arbeiten für die FAQ verfassen. Ist sowas gewünscht oder wird sowas gebraucht, weil dann schreib ich das kurz in ein neues Thema das dann nur in die FAQ verschoben werden muss.

    MfG

    Nocadas



  • Keine Ahnung, was willst du denn schreiben?



  • Habe hier im Forum schon oft Fragen zum Thema wie lese ich eine Datei aus, wie veränder ich sie und wie schreib ich bzw. hänge neue Daten an eine Datei an. Auch wie man Daten umgeht, man kann z.b. Zeile für Zeile auslesen, die Zeile verändern und dann in eine neue Datei schreiben, man kann wie z.b. ich auch alle Zeilen auslesen und dann bearbeiten, hat aber dann Speicherprobleme, deshalb benutz ich ja den Heap bzw. Freestore, bin mir immer noch unschlüssig was es jetzt genau ist, hab da viele Meinungen zu gelesen. Möchte nur verschiedene Möglichkeiten schreiben die ich schon getestet habe und wenn was zu korrigieren ist dann schreib ich das kurz anders rein. Soll helfen das das Forum nicht überschwemmt wird mit Fragen.



  • ok, tipp's mal zusammen, ich schau's mir dann an.



  • Oki, dann mach ich mich mal an die Arbeit, ich tipps erst ins Notepad und dann in ein neues Thema, dauert etwas, entweder setz ich es noch heute rein oder morgen früh.



  • ok, mach dir keinen Stress.


Anmelden zum Antworten