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;)