![]() |
TObjectlist: nicht genügend Speicher verfügbar
Hi,
Ich habe in meinem Projekt eine TObjectlist in der ich mehrere Objekte speichere um sie dann zu verwenden. DIe OBjekte füge ich so hinzu:
Delphi-Quellcode:
Animationen:TObjeclist;
... ... tempani : Tanimation; begin ... ... for x:=0 to 8 do for y:=0 to 8 do if spiel.sdk.feld[x,y]<>0 then begin tempani:=Tanimation.create(bmp2.Canvas.Pixels[spiel.feldbreite*x+(spiel.feldbreite div 2), spiel.feldbreite*y+(spiel.feldbreite div 2)], bmp.Canvas.Pixels[spiel.feldbreite*x+(spiel.feldbreite div 2), spiel.feldbreite*y+(spiel.feldbreite div 2)], 3, point(x,y)); Animationen.add(Tempani); dann hab ich einen timer in dem ich die Objekte bearbeite:
Delphi-Quellcode:
SO mein Problem ist, dass wenn ich öfters hintereinander die obere Prozedur ausführe ich einen haufen Fehlermeldungen bekomme. Und zwar steht auf allen folgendes: "Für diesen Befehl ist nicht genügend Speicher verfügbar". Ich hab daher die vermutung das irgendwo speicherüberreste von den gelöschten Objekten der Liste übrig bleiben. Ich hab aber eigentlich gedacht, dass sich die Tobjectliste um alles kümmert und man selber nichts mehr weiter tun muss ausser delete auszuführen.
procedure TForm1.AnimationstimerTimer(Sender: TObject);
var i ,x,y: integer; begin i:=0; while (i < Animationen.Count) do begin inc((Animationen[i] as TAnimation).index); if (Animationen[i] as TAnimation).index > animation.anzfarbe then begin Animationen.Delete(i); dec(i); end else begin //tue dies und das end; inc(i); end; if animationen.Count=0 then begin //ebenso dies und das Animationstimer.Enabled:=false; end; end; Hat jemand eine Ahnung was hier falsch läuft? danke schonmal im vorraus :) |
Re: TObjectlist: nicht genügend Speicher verfügbar
Hast du auch OwnsObjects auf True gesetzt? Denn nur dann kümmert sich die ObjektListe um das Freigeben der Objekte. Ansonsten bist du dafür verantwortlich.
|
Re: TObjectlist: nicht genügend Speicher verfügbar
Schonmal im Taskmanager die Anzahl der GDI Objekte angeschaut? Werden die vllt. immer mehr und der Fehler bezieht sich auf ein ganz anderes Problem?
|
Re: TObjectlist: nicht genügend Speicher verfügbar
Häng doch mal
![]() Entweder du hast massig Speicherlöcher oder du rauscht in das Fragmentierungsproblem des normalen Speichermanager von D < 2006. Dort denkt dann die interne Speicherverwaltung das kein Speicher mehr frei ist obwohl das Programm nur wengi Speicher verwendet. |
Re: TObjectlist: nicht genügend Speicher verfügbar
Zitat:
Kommt die Programmausführung überhaupt in die Animationen.Delete-Zeile? Wenn nicht, dann hast du ein Speicherleck bis zum Freigeben/Leeren der Animationen-Liste (vorausgesetzt du hast den Default-Parameter "OwnsObjects" von TObjectList nicht auf False gesetzt). Übrigens ist die Pixels[] Eigenschaft der Canvas nicht gerade schnell. Besser (aber noch nicht das non-plus-ultra => Scanlines) ist es, das Canvas.Handle zuwischenzuspeichern und dann mittels GetPixel(dc, x, y) dir die Farben zu holen. |
Re: TObjectlist: nicht genügend Speicher verfügbar
Zitat:
Zitat:
edit: ok ein simples temp.destroy; in der zeichenprozedur hat das ganze gelöst :) vielen dank euch allen :) |
Re: TObjectlist: nicht genügend Speicher verfügbar
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz