Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

31.08.2004, 16:55

Speicherleaks -- freigeben

Hi leute,

welche Objekte sollte man eigentlich nachdem man sie nicht mehr benötigt wieder freigeben???

2

31.08.2004, 16:57

Ich denk mal alle, oder? ;)

3

31.08.2004, 16:59

das sind die antworten die ich liebe (oder liegt es an der Frage)!!??

wenn du sagst alle meinst du damit auch Variablen, Strukturen, Variablen zum zwischenspeichern ...???

oder hab ich da was grundlegendes übersehen?

AC

Frischling

  • Private Nachricht senden

4

31.08.2004, 17:05

ALLES was du mit new allokierst musst du irgendwann wieder mit delete bzw. delete[] freigeben

Ausnahmen bestätigen auch hier die regel!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

31.08.2004, 18:09

erweiterung: Du musst sie dann spätestens löschen, wenn derletzte Zeiger der auf den Speicher zeigt glecih gelöscht wird, denn dann ist jede(außer man gamblet oder hat eine eigene mem-verwaltung )zugriffsmöglichkeit vertan...

PS: das slebe gilt auch bei malloc,calloc,realloc usw.

6

31.08.2004, 18:25

Zitat von »"AC"«

ALLES was du mit new allokierst musst du irgendwann wieder mit delete bzw. delete[] freigeben

Ausnahmen bestätigen auch hier die regel!
Welche Ausnahmen? Afaik gibt es keine.

Um es zu Spezifzieren. Alle Daten die man auf den Heap ablegt (new, new[], calloc, malloc, usw.) müssen spätestens beim beenden des Programms wieder freigegeben werden.

Für alle die einfach zu faul sind, ihren Müll wegzuräumen. Seit der NT Reihe (das schließt XP mit ein) wird der Speicher beim beenden des Programms vom OS freigegeben. Aber das ist mal ganz schlechter Programmierstil und sollte man sich nicht angewöhnen ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

31.08.2004, 18:29

man sollte wie schon gesagt alles freigeben was man mit new oder realloc (böse funktion!!!) bereit gestellt hat mit delete freigeben.

p.s.: Ich sagte "böse funktion!!!" der grund ist, da die keine ahnung hat von con- und destruktoren! Hier aber eine kleine abwandlung die professioneller ist ;D
http://www.scherfgen-software.net/forum/viewtopic.php?t=2340

FAQ rulz :D

AC

Frischling

  • Private Nachricht senden

8

01.09.2004, 02:41

Zitat von »"DragonMaster"«

Welche Ausnahmen? Afaik gibt es keine.


z.B.

auto_ptr< int > pi( new int(123) );

auto_ptr deallokiert das mit new erzeugte objekt beim verlassen des scope.

9

01.09.2004, 03:02

Das ist richtig. Aber die Klasse erfüllt trotzdem die Kriterien die Patrik und ich bereits angesprochen haben. Es wird nur Automatisiert, gemacht werden muss es aber dennoch ;)


Was mir grad so einfällt. COM-Objekte bilden hier eine ganz böse Falle. Die liegen nämlich ebenfalls im Heap um müssen mit delete gelöscht werden, wenn der Referenzzähler gleich NULL ist. Hier wird das ebenfalls nur hinter der Release-Methode versteckt. Wer das nicht macht produziert auch bei bei der NT-Reihe Memory Leaks.

Das nur mal nebenbei :)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

10

01.09.2004, 07:35

Also gibts da nicht so nen Grabage-Collector (oder wie die routine heißt) wie in Java der mir den Müll wegräumt.

wenn ich wirklich alles was mit new angelegt wurde wegräumen muss ist das ja haufen arbeit.

Genügt es auch wenn ich z.b. ein objekt habe in dem mehrer mit new angelegte Variable existieren nur das objekt selbst delete? oder muss ich jede einzelne Variable deleten?

Werbeanzeige