Chrischn2 Geschrieben 7. September 2003 Teilen Geschrieben 7. September 2003 Hallo, ich erstelle in einem Array für TImages wärend des Programmablaufs mehrere Images. Werden diese Images nicht mehr gebraucht, dann muss man sie ja bekanntlicherweise mit free wieder freigeben, weil sonst Arbeitsspeicher verbraucht wird. Mit dem Befehl SetLength(Dyn_Image, 0); kann man die Anzahl der Images im Array wieder auf 0 setzen. Muss man die Images vorher trotzdem mit free freigeben? Was in der Delphi Hilfe steht ist mir nicht ganz eindeutig klar : Bei einer langen String- oder einer dynamischen Array-Variable weist SetLength dem mit S referenzierten String oder Array die angegebene Länge zu. Dabei bleiben die Zeichen im String oder die Elemente im Array erhalten, jedoch ist der Inhalt des neu zugewiesenen Speicherbereichs nicht definiert. Ist nicht genug Speicher für die Variable vorhanden, wird eine EOutOfMemory-Exception ausgelöst. Nach dem Aufruf von SetLength ist sichergestellt, daß S auf einen eindeutigen String oder ein eindeutiges Array zeigt (d. h. dessen Referenzzähler den Wert Eins hat). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 8. September 2003 Teilen Geschrieben 8. September 2003 Original geschrieben von Chrischn2 Muss man die Images vorher trotzdem mit free freigeben? Was in der Delphi Hilfe steht ist mir nicht ganz eindeutig klar : Ja, im Arrray stehen ja nur Zeiger auf den Speicherbereich in dem das TImage Objekt abgelegt ist. Diese Pointer werden dadurch zwar nicht mehr zugänglich gemacht, der Speicher der hintendranhängt bleibt aber unverändert. Also erst eine Schleife über das dyn. Array und alles freigeben, dann (u.U.) die Länge auf 0 setzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chrischn2 Geschrieben 8. September 2003 Autor Teilen Geschrieben 8. September 2003 Okidoki, habe ich bei meinem Programm auch so gemacht, aber hätte ja sein können, dass die Bilder dann automatisch gelöscht werden und dann hätte man sich beim nächsten mal Arbeit ersparen können. Bis denne http://www.cfrerichs.de Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 9. September 2003 Teilen Geschrieben 9. September 2003 Als Grundregel kann man eigentlich immer nehmen: Alles was du erzeugst, musst du auch wieder freigeben! Natürlich gibt es da auch Ausnahmen (über die Owner Property), aber sicherer und besser ist es das selber zu machen (auch mit Owner). Die paar Zeilen machen dann auch nix mehr Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.