Speicherlöschung???



  • Also ich habe folgendes Problem und zwar würde ich gerne wissen wie das Löschen des dynamisch angeforderten Speichers funktioniert und zwar erstmals in diesem Beispiel:(Liste)

    #include <iostream.h>
    #include <string.h>
    
    struct Person
    {
        char name[20];
        int zahl;
        Person *next;
    };
    
    struct Schlange
    {
        Person *first;
        Person *last;
        int counter;
    };
    .
    .
    .
    ich füge ein paar Personen rein über:
    
    void add_back(int pzahl, char *pname, Schlange *Kasse)
    {
    
        Person *tmp;
    
        if(Kasse->first == NULL && Kasse->last == NULL)
        {
            tmp = new Person;         //Dynamisches Reservieren von Speicherplatz
                                      //für einen Datentyp Person (neue "Person")
            strcpy(tmp->name, pname); //Kopieren des Namens in die "Person"
            tmp->zahl = pzahl;
            tmp->next = NULL;         //Setzen der Nachfolgeradresse auf NULL
    
            Kasse->first = tmp;
            Kasse->last = tmp;
    
            Kasse->counter++;
        }
        else
        {
          tmp = new Person;
          strcpy(tmp->name, pname);
          tmp->zahl = pzahl;
    
          Kasse->last->next = tmp;  //nachträgliches setzen der  Nachfolgeradresse
                                    //der ersten "Person" auf die neuerzeugte Person
          Kasse->last = tmp;        //die neue "Person" ist automatisch letzter
    
          Kasse->counter++;
    
        }
    
    }
    .
    .
    .
    irgendwann will ich alles löschen:
    
    void delete_schlange(Schlange *Kasse)
    {
        Person *tmp;
    
        for(int i = 0; i < Kasse->counter; i++)   //löschen der einzelnen "Personen"
        {
            tmp = Kasse->first;
            Kasse->first = Kasse->first->next;
            delete tmp;
        }
    
        printf("\nDie Schlange wurde geloescht!!!");
    }
    

    Jetzt meine Frage habe ich damit alles gelöscht oder muß ich jeweils name,zahl,next der einzeln löschen?

    Meiner Meinung nach ist das so in Ordnung!!!???



  • Ich weiß das jetzt auch gar nicht so genau, aber theoretisch gibt delete doch nur den Speicherplatz frei den dein Pointer besetzt hat, den weiteren mit name usw nicht.

    😕

    Mich interessiert das jetzt auch!



  • hey gast,

    also beim aufrufen von delete auf ein struct in c++, wird implicit der destructor der struktur aufgerufen (in c++ sind strukturen objekten mit ausschliesslich öffentlichen eigenschaften/methoden!). dabei wird natürlich auch der speicherplatz deines ARRAYS char name[20] mit frei gegeben. du hast nur dann ein problem, wenn name eni pointer auf ein character array ist (char *name), welcher selbst durch ein new instanziiert wird! ergo: lustiger quelltext aber keine memleaks (zumindestens keine offensichtlichen). vielleicht solltest du aber mal einen blick in "Robert Sedgewick - Algorithms in C++" oder "Algorithmen und Datenstrukturen in C++" im O'Reilly - Verlag werfen, damit deine liste ein wenig mehr einer liste ähnelt;)


Anmelden zum Antworten